一、awk说明
参考链接
awk是一个强大的文本分析工具,相对于grep的查找,sed的编辑,awk在其对数据分析并生成报告时,显得尤为强大。
简单来说awk就是把文件逐行的读入,以空格为默认分隔符将每行切片,切开的部分再进行各种分析处理。
使用方法 : awk ‘{pattern + action}’ {filenames}
说明:
1、 pattern 表示 AWK 在数据中查找的内容
2、action 是在找到匹配内容时所执行的一系列命令
3、括号{}不需要在程序中始终出现,但它们用于根据特定的模式对一系列指令进行分组。
4、pattern就是要表示的正则表达式,用斜杠括起来。
二、awk使用实例
1、匹配包含关键字的所有行
awk '/root/' /etc/passwd
结果:
[root@iZ2ze4tgce8abomp7tyymhZ ~]# awk '/root/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
operator:x:11:0:operator:/root:/sbin/nologin
dockerroot:x:997:994:Docker User:/var/lib/docker:/sbin/nologin
2、搜索包含关键字的所有行,并输入指定列
awk -F: '/root/ {print $7}' /etc/passwd
以:分割搜索包含root的所有行并输出第7列
结果:
[root@iZ2ze4tgce8abomp7tyymhZ ~]# awk -F: '/root/{print $7}' /etc/passwd
/bin/bash
/sbin/nologin
/sbin/nologin
3、统计/etc/passwd:文件名,每行的行号,每行的列数,对应的完整行内容:
awk -F: '{printf("filename:%3s num:%3s clumns:%3s content:%3s\n",FILENAME,NR,NF,$0)}' /etc/passwd
printf格式化输出 %3s右对齐如果不够三个字符则用空格补充,%-3s左对齐
结果:
filename:/etc/passwd num: 1 clumns: 7 content:root:x:0:0:root:/root:/bin/bash
filename:/etc/passwd num: 2 clumns: 7 content:bin:x:1:1:bin:/bin:/sbin/nologin
filename:/etc/passwd num: 3 clumns: 7 content:daemon:x:2:2:daemon:/sbin:/sbin/nologin
filename:/etc/passwd num: 4 clumns: 7 content:adm:x:3:4:adm:/var/adm:/sbin/nologin
filename:/etc/passwd num: 5 clumns: 7 content:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
filename:/etc/passwd num: 6 clumns: 7 content:sync:x:5:0:sync:/sbin:/bin/sync
filename:/etc/passwd num: 7 clumns: 7 content:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
filename:/etc/passwd num: 8 clumns: 7 content:halt:x:7:0:halt:/sbin:/sbin/halt
filename:/etc/passwd num: 9 clumns: 7 content:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
filename:/etc/passwd num: 10 clumns: 7 content:operator:x:11:0:operator:/root:/sbin/nologin
filename:/etc/passwd num: 11 clumns: 7 content:games:x:12:100:games:/usr/games:/sbin/nologin
filename:/etc/passwd num: 12 clumns: 7 content:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
filename:/etc/passwd num: 13 clumns: 7 content:nobody:x:99:99:Nobody:/:/sbin/nologin
filename:/etc/passwd num: 14 clumns: 7 content:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
filename:/etc/passwd num: 15 clumns: 7 content:dbus:x:81:81:System message bus:/:/sbin/nologin
filename:/etc/passwd num: 16 clumns: 7 content:polkitd:x:999:998:User for polkitd:/:/sbin/nologin
filename:/etc/passwd num: 17 clumns: 7 content:sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
filename:/etc/passwd num: 18 clumns: 7 content:postfix:x:89:89::/var/spool/postfix:/sbin/nologin
filename:/etc/passwd num: 19 clumns: 7 content:chrony:x:998:996::/var/lib/chrony:/sbin/nologin
filename:/etc/passwd num: 20 clumns: 7 content:ntp:x:38:38::/etc/ntp:/sbin/nologin
filename:/etc/passwd num: 21 clumns: 7 content:tcpdump:x:72:72::/:/sbin/nologin
filename:/etc/passwd num: 22 clumns: 7 content:nscd:x:28:28:NSCD Daemon:/:/sbin/nologin
filename:/etc/passwd num: 23 clumns: 7 content:dockerroot:x:997:994:Docker User:/var/lib/docker:/sbin/nologin
4、根据条件指定输出
awk -F: 'NR==2 {print $7}' /etc/passwd
说明:输出第二行的第七列
结果:
[root@iZ2ze4tgce8abomp7tyymhZ ~]# awk -F: 'NR==2 {print $7}' /etc/passwd
/sbin/nologin
5、根据条件指定输出
awk -F: '{if (NR>=2&&NR<=7) print $7}' /etc/passwd
说明:输出第2-7行的第7列内容,判断条件不要忘记加()
结果:
[root@iZ2ze4tgce8abomp7tyymhZ ~]# awk -F: '{if (NR>=2&&NR<=7) print $7}' /etc/passwd
/sbin/nologin
/sbin/nologin
/sbin/nologin
/sbin/nologin
/bin/sync
/sbin/shutdown
6、加入begin end(相当于加入表头和结尾)
awk -F: 'BEGIN{printf("%-5s%-20s%3s\n","num","name","shell")} {printf("%-5s%-20s%3s\n",NR,$1,$NF)} END{print"bye"}' /etc/passwd
说明:
1、printf括号不要忘记
2、printf括号里面的双引号不要忘记
3、printf后面的\n换行符不要忘记
结果:
[root@iZ2ze4tgce8abomp7tyymhZ ~]# awk -F: 'BEGIN{printf("%-5s%-20s%3s\n","num","name","shell")} {printf("%-5s%-20s%3s\n",NR,$1,$NF)} END{print"bye"}' /etc/pas swd
num name shell
1 root /bin/bash
2 bin /sbin/nologin
3 daemon /sbin/nologin
4 adm /sbin/nologin
5 lp /sbin/nologin
6 sync /bin/sync
7 shutdown /sbin/shutdown
8 halt /sbin/halt
9 mail /sbin/nologin
10 operator /sbin/nologin
11 games /sbin/nologin
12 ftp /sbin/nologin
13 nobody /sbin/nologin
14 systemd-network /sbin/nologin
15 dbus /sbin/nologin
16 polkitd /sbin/nologin
17 sshd /sbin/nologin
18 postfix /sbin/nologin
19 chrony /sbin/nologin
20 ntp /sbin/nologin
21 tcpdump /sbin/nologin
22 nscd /sbin/nologin
23 dockerroot /sbin/nologin
bye