awk基础学习
2019-12-20
需要巧记,很多格式,学习难度:grep、sed、awk
awk知识概述
1三剑客awk命令介绍
2三剑客awk命令执行原理语法结构
3三剑客awk命令实操练习
查询替换信息排除(取反)
4三剑客awk命令高级功能
一awk命令概述
awk -pattern scanning and processing language
模式扫描(处理文件每一行信息)
过程语言(一门脚本语言、逻辑语句(循环/判断))
读取内容放到内存里面,而不是模式空间。模式就相当于sed的条件
命令语法结构:awk [参数] ‘模式{动作信息}’ 文件信息
作用说明:
1)擅长对文件列进行操作
2)擅长统计分析数据信息
- [root@centos71 test]# cat awk.txt
- #!/bin/awk
- [root@centos71 test]# file awk.txt
- awk.txt: awk script, ASCII text executable
- [root@centos71 test]# cat python
- #!/bin/python
- [root@centos71 test]# file python
- python: a /bin/python script, ASCII text executable
二awk命令操作
空格和制表符是有区别的
匹配空格时无法匹配制表符
对文件对齐
- [root@centos71 test]# df
- Filesystem 1K-blocks Used Available Use% Mounted on
- /dev/sda3 41922560 3010792 38911768 8% /
- devtmpfs 487064 0 487064 0% /dev
- tmpfs 497960 0 497960 0% /dev/shm
- tmpfs 497960 7924 490036 2% /run
- tmpfs 497960 0 497960 0% /sys/fs/cgroup
- /dev/sda1 201380 107080 94300 54% /boot
- tmpfs 99596 0 99596 0% /run/user/0
- [root@centos71 test]# df | column -t
- Filesystem 1K-blocks Used Available Use% Mounted on
- /dev/sda3 41922560 3010792 38911768 8% /
- devtmpfs 487064 0 487064 0% /dev
- tmpfs 497960 0 497960 0% /dev/shm
- tmpfs 497960 7924 490036 2% /run
- tmpfs 497960 0 497960 0% /sys/fs/cgroup
- /dev/sda1 201380 107080 94300 54% /boot
- tmpfs 99596 0 99596 0% /run/user/
(一)显示xiaoyu的姓氏和ID号码
根据条件找出相应行
- [root@centos71 test]# cat awk.txt
- Zhang Dandan 41117397 :250:100:175
- Zhang Xiaoyu 390320151 :155:90:201
- Meng Feixue 80042789 :250:60:50
- Wu Waiwai 70271111 :250:80:75
- Liu Bingbing 41117483 :250:100:175
- Wang Xiaoai 3515064655 :50:95:135
- Zi Gege 1986787350 :250:168:200
- Li Youjiu 918391635 :175:75:300
- Lao Nanhai 918391635 :250:100:175
- [root@centos71 test]# awk '/Xiaoyu/{print $0}' awk.txt
- Zhang Xiaoyu 390320151 :155:90:201
- [root@centos71 test]# awk '/Xiaoyu/' awk.txt
- Zhang Xiaoyu 390320151 :155:90:
awk取出多列信息可以使用 , 或者 " " 进行分隔
注意只能使用双引号
- [root@centos71 test]# awk '/Xiaoyu/{print $1" "$3}' awk.txt
- Zhang
- [root@centos71 test]# awk '/Xiaoyu/{print $1,$3}' awk.txt
- Zhang
在系统中有时引号需要嵌入式使用时,不能使用相同:
- [root@centos71 test]# awk '/Xiaoyu/{print $1' '$3}' awk.txt
- awk: cmd. line:1: /Xiaoyu/{print $1
- awk: cmd. line:1: ^ unexpected newline or end of string
$n~/xxx/取出第n列里面有xxx信息
~表示匹配,出现在awk或者搭建网站的配置文件里面
- [root@centos71 test]# awk '$2~/Xiaoai/{print $1,$4}' awk.txt
- Wang :50:95:
(二)姓氏是zhang的人,显示他的第二次捐款金额及他的名字
根据条件找出相应行
- [root@centos71 test]# awk '$1~/Zhang/' awk.txt
- Zhang Dandan 41117397 :250:100:175
- Zhang Xiaoyu 390320151 :155:90:201
- [root@centos71 test]#
[ :]+表示以空格或者冒号作为分隔符,一次或者多次
- [root@centos71 test]# cat awk.txt
- Zhang Dandan 41117397 :250:100:175
- Zhang Xiaoyu 390320151 :155:90:201
- Meng Feixue 80042789 :250:60:50
- Wu Waiwai 70271111 :250:80:75 Xiaoai
- Liu Bingbing 41117483 :250:100:175
- Wang Xiaoai 3515064655 :50:95:135
- Zi Gege 1986787350 :250:168:200
- Li Youjiu 918391635 :175:75:300
- Lao Nanhai 918391635 :250:100:175
- [root@centos71 test]# awk -F "[ :]+" '$1~/Zhang/{print $1,$2,$5}' awk.txt
- Zhang Dandan 100
- Zhang Xiaoyu
#| "表示#和空格是一个字符串了,整体识别
利用-F指定列分隔符,结合正则可以识别多个分隔符号
- [root@centos61 ~]# awk -F "#| " '{print $1,$3}' /etc/selinux/config
- This
- SELINUX=
- SELINUX=enforcing
- SELINUXTYPE=
- SELINUXTYPE=targeted
- [root@centos61 ~]# cat /etc/selinux/config
- # This file controls the state of SELinux on the system.
- # SELINUX= can take one of these three values:
- # enforcing - SELinux security policy is enforced.
- # permissive - SELinux prints warnings instead of enforcing.
- # disabled - No SELinux policy is loaded.
- SELINUX=enforcing
- # SELINUXTYPE= can take one of these two values:
- # targeted - Targeted processes are protected,
- # mls - Multi Level Security protection.
- SELINUXTYPE=targeted
- [root@centos61 ~]# lsblk
- NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
- sr0 11:0 1 3.7G 0 rom
- sda 8:0 0 200G 0 disk
- ├─sda1 8:1 0 1G 0 part /boot
- ├─sda2 8:2 0 48.8G 0 part /
- ├─sda3 8:3 0 19.5G 0 part /app
- ├─sda4 8:4 0 1K 0 part
- └─sda5 8:5 0 2G 0 part [SWAP]
- [root@centos61 ~]# lsblk | awk -F "[: ]+" '{print $1,$3}' | column -t
- NAME MIN
- sr0 0
- sda 0
- ├─sda1 1
- ├─sda2 2
- ├─sda3 3
- ├─sda4 4
- └─sda5
(三)显示所有以41开头的ID号码的人的全名和ID号码
简单,注意正则被三剑客所使用
- [root@centos71 test]# awk '$3~/^41/' awk.txt
- Zhang Dandan 41117397 :250:100:175
- Liu Bingbing 41117483 :250:100:
- [root@centos71 test]# awk '$3~/^41/{print $1,$2,$3}' awk.txt
- Zhang Dandan 41117397
- Liu Bingbing
连续出现的字段可以使用高级方法
- [root@centos71 test]# awk '{for(i=1;i<=3;i++) printf $i""FS;print ""}' awk.txt
- Zhang Dandan 41117397
- Zhang Xiaoyu 390320151
- Meng Feixue 80042789
- Wu Waiwai 70271111
- Liu Bingbing 41117483
- Wang Xiaoai 3515064655
- Zi Gege 1986787350
- Li Youjiu 918391635
- Lao Nanhai 918391635
利用awk命令连续显示多列信息
- [root@centos71 test]# awk '{for(i=1;i<=3;i++){print $i}}' num.txt
- 01
- 02
- 03
- 01
- 02
- 03
- [root@centos71 test]# awk '{for(i=1;i<=3;i++){printf $i}}' num.txt
- 010203010203[root@centos71 test]#
换行显示
- [root@centos71 test]# awk '{for(i=1;i<=3;i++){printf $i" "};printf "\n"}' num.txt
- 01 02 03
- 01 02 03
(五)显示所有以5或者0结尾id显示出来,并显示人的名字和ID号码
- awk '$3~/[05]$/{print $1,$2,$3}' awk.txt
- Wang Xiaoai 3515064655
- Zi Gege 1986787350
- Li Youjiu 918391635
- Lao Nanhai
- [root@centos71 test]# awk '$3!~/[05]$/{print $1,$2,$3}' awk.txt
- Zhang Dandan 41117397
- Zhang Xiaoyu 390320151
- Meng Feixue 80042789
- Wu Waiwai 70271111
- Liu Bingbing 41117483
- [root@centos71 test]# which awk
- /usr/bin/awk
- [root@centos71 test]# ll /usr/bin/awk
- lrwxrwxrwx. 1 root root 4 Nov 26 17:32 /usr/bin/awk -> gawk
(六)显示Xiaoyu的捐款,每个都以$开头
- [root@centos71 test]# awk '$2~/Xiaoyu/{gsub(/:/,"$",$4);print $4}' awk.txt
- $155$90$
awk替换信息方法
二awk命令高级用法
awk模式概念:
普通模式: 利用正则进行匹配/利用行号进行匹配/利用字符进行匹配
特殊模式:
BEGIN: 在处理文件之前先做的事情 (准备工作)
END: 在处理文件之后要做的事情 (后续工作)
(一)在处理文件之前加表头
- [root@centos71 test]# awk 'BEGIN{print"姓","名","id","金额"}{print $0}' awk.txt
- 姓 名 id 金额
- Zhang Dandan 41117397 :250:100:175
- Zhang Xiaoyu 390320151 :155:90:201
- Meng Feixue 80042789 :250:60:50
- Wu Waiwai 70271111 :250:80:75 Xiaoai
- Liu Bingbing 41117483 :250:100:175
- Wang Xiaoai 3515064655 :50:95:135
- Zi Gege 1986787350 :250:168:200
- Li Youjiu 918391635 :175:75:300
- Lao Nanhai 918391635 :250:100:
- [root@centos71 test]# awk 'BEGIN{print"姓","名","id","金额"}{print $0}' awk.txt | column -t
- 姓 名 id 金额
- Zhang Dandan 41117397 :250:100:175
- Zhang Xiaoyu 390320151 :155:90:201
- Meng Feixue 80042789 :250:60:50
- Wu Waiwai 70271111 :250:80:75 Xiaoai
- Liu Bingbing 41117483 :250:100:175
- Wang Xiaoai 3515064655 :50:95:135
- Zi Gege 1986787350 :250:168:200
- Li Youjiu 918391635 :175:75:300
- Lao Nanhai 918391635 :250:100:175
(二)进行四则运算
- [root@centos71 ~]# awk 'BEGIN{print 2+2}'
- 4
- [root@centos71 ~]# awk 'BEGIN{print 2-2}'
- 0
- [root@centos71 ~]# awk 'BEGIN{print 2*2}'
- 4
- [root@centos71 ~]# awk 'BEGIN{print 2/2}'
(三)进行变量设定
注意要加双引号,打印时不需要加$
- [root@centos71 ~]# awk 'BEGIN{name=wang;print name}'
- [root@centos71 ~]# awk 'BEGIN{name="wang";print name}'
- wang
内置变量NR表示行号信息
- [root@centos71 ~]# cat -n /etc/issue
- 1 \S
- 2 Kernel \r on an \m
- 3
- [root@centos71 ~]# awk '{print NR}' /etc/issue
- 1
- 2
NF:显示一行里面的字段数量
- [root@centos61 ~]# cat /etc/passwd
- root:x:0:0:root:/root:/bin/bash
- bin:x:1:1:bin:/bin:/sbin/nologin
- daemon:x:2:2:daemon:/sbin:/sbin/nologin
- adm:x:3:4:adm:/var/adm:/sbin/nologin
- lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
- sync:x:5:0:sync:/sbin:/bin/sync
- shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
- halt:x:7:0:halt:/sbin:/sbin/halt
- mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
- uucp:x:10:14:uucp:/var/spool/uucp:/sbin/nologin
- operator:x:11:0:operator:/root:/sbin/nologin
- games:x:12:100:games:/usr/games:/sbin/nologin
- gopher:x:13:30:gopher:/var/gopher:/sbin/nologin
- ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
- nobody:x:99:99:Nobody:/:/sbin/nologin
- vcsa:x:69:69:virtual console memory owner:/dev:/sbin/nologin
- saslauth:x:499:76:Saslauthd user:/var/empty/saslauth:/sbin/nologin
- postfix:x:89:89::/var/spool/postfix:/sbin/nologin
- sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
- apache:x:48:48:Apache:/var/www:/sbin/nologin
- chrony:x:498:499::/var/lib/chrony:/sbin/nologin
- ntp:x:38:38::/etc/ntp:/sbin/nologin
- [root@centos61 ~]# cat /etc/passwd | wc
- 22 28 983
- [root@centos61 ~]# awk -F: '{print NF}' /etc/passwd | wc
- 22 22
FS : 表示分隔符字段信息
- [root@centos61 ~]# df
- Filesystem 1K-blocks Used Available Use% Mounted on
- /dev/sda2 50264772 910576 46794196 2% /
- tmpfs 502068 0 502068 0% /dev/shm
- /dev/sda3 20027260 44992 18958268 1% /app
- /dev/sda1 999320 30508 916384 4% /boot
- [root@centos61 ~]# df | awk -v FS=" " '{print $1,$5}'
- Filesystem Use%
- /dev/sda2 2%
- tmpfs 0%
- /dev/sda3 1%
- /dev/sda1 4%
- [root@centos61 ~]# df | awk -v FS=" " '{print $1,$5}' | column -t
- Filesystem Use%
- /dev/sda2 2%
- tmpfs 0%
- /dev/sda3 1%
- /dev/sda1 4%
(四)END统计分析日志公式信息
- [root@centos61 ~]# awk '/sbin/{i=i+1}END{print i}' /etc/passwd
- 21
- [root@centos61 ~]# grep sbin /etc/passwd | wc
- 21 27
- [root@centos71 ~]# grep "sbin" /etc/passwd -o
- sbin
- sbin
- sbin
- sbin
- sbin
- sbin
- sbin
- sbin
- sbin
- sbin
- sbin
- sbin
- sbin
- sbin
- sbin
- sbin
- sbin
- sbin
- sbin
- sbin
- sbin
- sbin
- sbin
- sbin
- sbin
(五)END求和运算
求和公式: i=i+$n $
n 需要将第几列做求和运算
i=i+$1 i=0 i=0+1 print i--->1
i=i+$1 i=1 i=1+1 print i--->2
初始值为0
- [root@centos61 ~]# seq 10 > seq.txt
- [root@centos61 ~]# cat seq.txt
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- [root@centos61 ~]# awk '{i=i+$1; print i}' seq.txt
- 1
- 3
- 6
- 10
- 15
- 21
- 28
- 36
- 45
- 55
- [root@centos61 ~]# awk '{i=i+$1}END{ print i}' seq.txt
awk基础学习的更多相关文章
- 鸟哥Linux私房菜基础学习篇学习笔记3
鸟哥Linux私房菜基础学习篇学习笔记3 第十二章 正则表达式与文件格式化处理: 正则表达式(Regular Expression) 是通过一些特殊字符的排列,用以查找.删除.替换一行或多行文字字符: ...
- Linux shell脚本基础学习详细介绍(完整版)一
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提.1. Lin ...
- salesforce 零基础学习(五十二)Trigger使用篇(二)
第十七篇的Trigger用法为通过Handler方式实现Trigger的封装,此种好处是一个Handler对应一个sObject,使本该在Trigger中写的代码分到Handler中,代码更加清晰. ...
- 如何从零基础学习VR
转载请声明转载地址:http://www.cnblogs.com/Rodolfo/,违者必究. 近期很多搞技术的朋友问我,如何步入VR的圈子?如何从零基础系统性的学习VR技术? 本人将于2017年1月 ...
- IOS基础学习-2: UIButton
IOS基础学习-2: UIButton UIButton是一个标准的UIControl控件,UIKit提供了一组控件:UISwitch开关.UIButton按钮.UISegmentedContro ...
- HTML5零基础学习Web前端需要知道哪些?
HTML零基础学习Web前端网页制作,首先是要掌握一些常用标签的使用和他们的各个属性,常用的标签我总结了一下有以下这些: html:页面的根元素. head:页面的头部标签,是所有头部元素的容器. b ...
- python入门到精通[三]:基础学习(2)
摘要:Python基础学习:列表.元组.字典.函数.序列化.正则.模块. 上一节学习了字符串.流程控制.文件及目录操作,这节介绍下列表.元组.字典.函数.序列化.正则.模块. 1.列表 python中 ...
- python入门到精通[二]:基础学习(1)
摘要:Python基础学习: 注释.字符串操作.用户交互.流程控制.导入模块.文件操作.目录操作. 上一节讲了分别在windows下和linux下的环境配置,这节以linux为例学习基本语法.代码部分 ...
- CSS零基础学习笔记.
酸菜记 之 CSS的零基础. 这篇是我自己从零基础学习CSS的笔记加理解总结归纳的,如有不对的地方,请留言指教, 学前了解: CSS中字母是不分大小写的; CSS文件可以使用在各种程序文件中(如:PH ...
随机推荐
- AutoML文献阅读
逐步会更新阅读过的AutoML文献(其实是NAS),以及自己的一些思考 Progressive Neural Architecture Search,2018ECCV的文章: 目的是:Speed up ...
- 前端 CSS的选择器
什么是选择器.在一个HTML页面中会有很多很多的元素,不同的元素可能会有不同的样式,某些元素又需要设置相同的样式,选择器就是用来从HTML页面中查找特定元素的,找到元素之后就可以为它们设置样式了. 选 ...
- nrm安装与配置
nrm安装与配置:https://blog.csdn.net/anway12138/article/details/79455224
- nginx启动报错
nginx启动的时候报错 nginx: [emerg] invalid number of arguments in "root" directive in /etc/nginx/ ...
- 在django中使用循环与条件语言
{% if not Article_type_id %} <li class="active"><a href="/">全部</a ...
- java中访问修饰符public,private,protected,friendly的作用域
在修饰的元素上没有写任何的访问修饰符,则表示friendly. 作用域 当前类 同一包中 子孙类 其他包中 public √ √ √ √ protected √ √ √ × private √ x x ...
- k3 cloud中如何把一个账套中的单据部署到另一个账套中
打开bos,依次点击->解决方案->部署包管理 填写部署包名称并点击下一步 选择需要部署的单据并点击下一步 确定后点击下一步: 点击完成 找到部署路径会成一个部署包: 部署:打开部署包安装 ...
- spring服务器接收参数格式
注:@RequestParam 或@RequestBody等注解是否添加有什么区别 不加:参数可有可无,无参数时为null,但当参数类型是 数字基本类型(int.double)时会报错: 加上@Req ...
- 十一、Boostrap-X-editable
一.官网 http://vitalets.github.io/x-editable/index.html 二.实践 在jQuery中ajax配置项中的使用type与method的区别: type 和m ...
- Python自动化学习--元素定位
from selenium import webdriver import time driver = webdriver.Chrome() driver.get("https://www. ...