• head -n2 test.txt|awk -F ':' '{print $1}'bash
打印test.txt前兩行的第一段;.net
說明:-F後面跟分割符;$1表示第一段;{}花括號括起來print的範圍;字符串
• head -n2 test.txt|awk -F ':' '{print $0}'get
說明:$0 打印全部段;it
• awk -F ':' '{print $1"#"$2"#"$3"#"$4}'class
以:爲分割符打印出第一段,第二段,第三段,第四段,顯示的以#做爲分割符test
說明:awk
• awk '/oo/' test.txtftp
匹配字符或字符串;匹配包含oo的行;sed
• awk -F ':' '$1 ~/oo/' test.txt
針對某個段匹配;匹配第一段包含oo的行;
• awk -F ':' '/root/ {print $1,$3} /test/ {print $1,$3}' test.txt
awk -F ':' '/root/ {print $1,$3} ; /test/ {print $1,$3}' test.txt
屢次匹配;包含root的打印第一段和第三段,包含test的打印第一段和第三段;
條件操做符:
== 等於
> 大於
< 小於
!= 不等於
>= 大於等於
<= 小於等於
說明:當比較數字時,不能加引號,加引號後就不是按數字大小來比了,而是按ASCII碼比對。
• awk -F ':' '$3==0' /etc/passwd
# root:x:0:0:root:/root:/bin/bash
第三段爲 0的行
• awk -F ':' '$3>=500' /etc/passwd
#polkitd:x:999:998:User for polkitd:/:/sbin/nologin
#gavin:x:1000:1000::/home/gavin:/bin/bash
#zhang:x:1001:1001::/home/zhang:/bin/bash
#user:x:1002:1002::/home/user:/bin/bash
第三段大於等於500的行
• awk -F ':' '$7!="/sbin/nologin"' /etc/passwd
root:x:0:0:root:/root:/bin/bash
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
gavin:x:1000:1000::/home/gavin:/bin/bash
zhang:x:1001:1001::/home/zhang:/bin/bash
user:x:1002:1002::/home/user:/bin/bash
第7段不是/sbin/nologin 的行;
• awk -F ':' '$3<$4' /etc/passwd
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
匹配$3小於$4的行;
• awk -F ':' '$3>"5" && $3<"7"' /etc/passwd
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
tss:x:59:59:Account used by the trousers package to sandbox the tcsd daemon:/dev/null:/sbin/nologin
數字加引號後匹配規則按ASCII碼來比對
[root@gavin ~]# awk -F':' '$3>5 && $3<7' /etc/passwd
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
不加引號按數字比對;
• awk -F ':' '$3>1000 || $7=="/bin/bash"' /etc/passwd
root:x:0:0:root:/root:/bin/bash
gavin:x:1000:1000::/home/gavin:/bin/bash
zhang:x:1001:1001::/home/zhang:/bin/bash
user:x:1002:1002::/home/user:/bin/bash
匹配第三段大於1000或者第7段爲/bin/bash的行;
• head -5 /etc/passwd |awk -F ':' '{OFS="#"} {print $1,$3,$4}'
root#0#0
bin#1#1
daemon#2#2
adm#3#4
lp#4#7
OFS指定打印段之間的分隔符;
• awk -F ':' '{OFS="#"} {if ($3>1000) {print $1,$2,$3,$4}}' /etc/passwd
zhang#1001#/bin/bash
user#1002#/bin/bash
第三段大於1000則打印前四段,並用#作分割符;
[root@gavin ~]# awk -F':' '{OFS="#"} $3>1000 {print $1,$2,$3,$4}' /etc/passwd
zhang#x#1001#1001
user#x#1002#1002
• head -n3 /etc/passwd | awk -F ':' '{print NF}'
7
7
7
NF表示有幾段;$NF表示最後一段,若是NF是7就是$7;
[root@gavin ~]# head -n3 /etc/passwd | awk -F ':' '{print $NF}'
/bin/bash
/sbin/nologin
/sbin/nologin
• head -n3 /etc/passwd | awk -F ':' '{print NR}'
1
2
3
NR:表示行號;$NR表示是第幾行就打印第幾段;
[root@gavin ~]# head -n3 /etc/passwd | awk -F ':' '{print $NR}'
root
x
2
• awk 'NR>40' /etc/passwd
打印行號大於40的行
• awk -F ':' 'NR<20 && $1 ~ /roo/' /etc/passwd
root:x:0:0:root:/root:/bin/bash
匹配小於行號小於20而且包含roo的行;
• head -n 3 /etc/passwd |awk -F ':' '$1="root"'
root x 0 0 root /root /bin/bash
root x 1 1 bin /bin /sbin/nologin
root x 2 2 daemon /sbin /sbin/nologin
把第一段改爲root;
• awk -F ':' '{(tot=tot+$3)}; END {print tot}' /etc/passwd
4647
計算第三段的總和;
• awk -F ':' '{if ($1=="root") {print $0}}' /etc/passwd
root:x:0:0:root:/root:/bin/bash
打印第一段等於root的行;