awk和sed一样是流式编辑器,它也是针对文档中的行来操作的,一行一行的去执行。awk比sed更加强大,它能做到sed能做到的,同样也能做到sed不能做到的。awk工具和sed相比支持了分段,awk是先过滤行,再过滤列。sed相反,先过滤列,在过滤行
<code>awk -F ':' '{print $1}' 1.txt</code> -F 指定分隔符 指定分隔符为;,且把第一段打印出来,$1表示第一段,$0表示所有段,如果不指定分隔符,默认是空格表示
<code>awk -F ':' '{print $1"#"$3"#"$4}' 1.txt</code> 打印时分隔符自己制定
[root@localhost awk]# awk -F ':' '{print $1"#"$3"#"$4}' 1.txt
root#0#0
bin#1#1
daemon#2#2
adm#3#4
lp#4#7
awk -F ':' '$1 ~ /oo+/' passwd 打印出第一列匹配到oo+的行
[root@localhost awk]# awk -F ':' '$1 ~ /oo+/' 1.txt
root:x:0:0:root:/root:/bin/bash
awk -F ':' '/root/ {print $1,$3} /user/ {print $3,$4}' 1.txt 匹配包含root或user一行,root打印出13列。user打印出3,4列
[root@localhost awk]# awk -F ':' '$3>=1000 ' 1.txt 打印第三段大于1000的,如果1000加上"",系统会判定为一个字符串,以阿 斯玛
lty:x:1000:1000::/home/lty:/bin/bash
rxr:x:1001:1001::/home/rxr:/bin/bash
user1:x:1111:1000::/home/user222:/sbin/nologin
user3:x:1010:1000::/home/user111:/sbin/nologin
xb:x:1112:1112::/home/xb:/bin/bash
lyh:x:1113:1113::/home/lyh:/bin/bash
mysql:x:1114:1114::/home/mysql:/bin/bash
[root@localhost awk]# awk -F ':' '$7!="/sbin/nologin"' 1.txt 打印出第7列不等于/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
awk -F ':' '$3<$4' 1.txt 第三列小于第四列。
awk -F ':' '$3>"5" && $3<"7"' 1.txt 第三列大于5并且第三列小于7
awk -F ':' '$3>1000 || $7=="/sbin/nologin"' 1.txt 第三列大于1000,或者第7列等于/sbin/nologin
awk -F ':' '{OFS="#"} {if ($3>1000) {print $1,$2,$3,$4}}' 1.txt 第三列大于1000,OFS表示每一列输出时加上#,语法是要加到分隔符后面
[root@localhost awk]# awk -F ':' '{print NR":" $0}' 1.txt NR 输出时把行号显示出来
1:root:x:0:0:root:/root:/bin/bash
2:bin:x:1:1:bin:/bin:/sbin/nologin
3:daemon:x:2:2:daemon:/sbin:/sbin/nologin
4:adm:x:3:4:adm:/var/adm:/sbin/nologin
5:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
6:sync:x:5:0:sync:/sbin:/bin/sync
7:shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
8:halt:x:7:0:halt:/sbin:/sbin/halt
9:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
10:operator:x:11:0:operator:/root:/sbin/nologin
11:games:x:12:100:games:/usr/games:/sbin/nologin
12:ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
13:nobody:x:99:99:Nobody:/:/sbin/nologin
14:systemd-bus-proxy:x:999:997:systemd Bus Proxy:/:/sbin/nologin
15:systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
[root@localhost awk]# awk -F ':' '{print NF":" $0}' 1.txt NF 把每一行有多少段显示出来
7:root:x:0:0:root:/root:/bin/bash
7:bin:x:1:1:bin:/bin:/sbin/nologin
7:daemon:x:2:2:daemon:/sbin:/sbin/nologin
7:adm:x:3:4:adm:/var/adm:/sbin/nologin
7:lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
7:sync:x:5:0:sync:/sbin:/bin/sync
7:halt:x:7:0:halt:/sbin:/sbin/halt
7:mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
7:operator:x:11:0:operator:/root:/sbin/nologin
7:games:x:12:100:games:/usr/games:/sbin/nologin
[root@localhost awk]# awk -F ':' 'NR<=5 ' 1.txt NR也可以作为判断条件,把前5行打印出来
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
[root@localhost awk]# awk -F ':' 'NR<=10 && $1 ~ /root|sync/ ' 1.txt 打印前十行,并且第一列包含root或者sync字符 ~包含
root:x:0:0:root:/root:/bin/bash~
[root@localhost awk]# awk -F ':' '{(tot=tot+$3)}; END {print tot}' 1.txt tot是一个赋值循环语句。让$3不停的相加循环,得 11122 出来最后相
本文转自 小新锐 51CTO博客,原文链接:http://blog.51cto.com/13407306/2044086,如需转载请自行联系原作者