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,如需轉載請自行聯系原作者