Shell工具 - awk
一个强大的文本分析工具,把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行分析处理。与cut类似,但功能更加强大。
1.基本用法
awk [选项参数] ‘pattern1{action1} pattern2{action2}...’ filename
pattern:表示AWK在数据中查找的内容,就是匹配模式
action:在找到匹配内容时所执行的一系列命令
2.选项参数说明
选项参数 | 功能 |
-F | 指定输入文件分隔符 |
-v | 赋值一个用户定义变量 |
3.案例实操
数据准备
[root@VM_0_8_centos data]# cp /etc/passwd ./
案例1:搜索passwd文件以root关键字开头的所有行,并输出该行的第7列。(列之间以:分隔)
[root@VM_0_8_centos data]# awk -F : '/^root/ {print $7}' passwd /bin/bash
案例2:搜索passwd文件以root关键字开头的所有行,并输出该行的第1列和第7列,中间以“,”号分割。
[root@VM_0_8_centos data]# awk -F : '/^root/ {print $1","$7}' passwd root,/bin/bash
案例3:只显示/etc/passwd的第一列和第七列,以逗号分割,且在所有行前面添加列名user,shell在最后一行添加"dahaige,/bin/buyaolian"
BEGIN和END相当于正则。
对于{print $1","$7}来说,没有pattern,那就是对所有行执行action。
[root@VM_0_8_centos data]# awk -F : 'BEGIN{print "user,shell"} {print $1","$7} END{print "dahaige,/bin/buyaolian"}' passwd user,shell root,/bin/bash bin,/sbin/nologin daemon,/sbin/nologin adm,/sbin/nologin ...省略... chrony,/sbin/nologin tcpdump,/sbin/nologin syslog,/bin/false dahaige,/bin/buyaolian
案例4:将passwd文件中的用户id增加数值1并输出
[root@VM_0_8_centos data]# awk -F : -v i=1 '{print $3+i}' passwd 1 2 3 4 ...省略... 73 997 1001
案例4:查看3个内置变量
FILENAME:文件名
NR:行号
NF:切割后列的个数
[root@VM_0_8_centos data]# awk -F : '{print FILENAME "," NR "," NF}' passwd passwd,1,7 passwd,2,7 passwd,3,7 passwd,4,7 ...省略... passwd,23,7 passwd,24,7 passwd,25,7 passwd,26,7
案例5:查看空行所在的行号
awk '/^$/ {print NR}' sed.txt