逐行讀取文本,默認以空格或tab鍵爲分隔符進行分割,將分割所得的各個字段保存到內建變量中,並按模式或者條件執行編輯命令。
sed命令經常使用語一整行的處理,而awk比較傾向於將一行分紅多個「字段」而後再進行處理。awk信息的讀入也是逐行讀取的,執行結果能夠經過print的功能將字段數據打印顯示。在使用awk命令的過程當中,可使用邏輯操做符「&&」表示「與」、「||」表示「或」、「!」表示「非」;還能夠進行簡單的數學運算,如+、-、*、/、%、^分別表示加、減、乘、除、取餘和乘方。html
awk 選項 '模式或條件 {操做}' 文件1 文件2 ……
awk -f 腳本文件 文件1 文件2 ……python
內建變量 | 說明 |
---|---|
FS | 列分隔符。指定每行文本的字段分隔符,默認爲空格或製表位。與「-F」做用相同 |
NF | 當前處理的行的字段個數 |
NR | 當前處理的行的行號(序數) |
$0 | 當前處理的行的整行內容 |
$n | 當前處理行的第n個字段(第n列) |
FILENAME | 被處理的文件名 |
RS | 行分隔符。awk從文件上讀取資料時,將根據RS的定義把資料切割成許多條記錄,而awk一次僅讀入一條記錄,以進行處理。預設值是「\n」 |
awk '{print}' 文件名apache
輸出全部內容數組
[root@localhost ~]# cat test.txt 11 22 33 44 [root@localhost ~]# awk '{print}' test.txt 11 22 33 44
awk '{print $0}' 文件名
輸出全部內容ruby
[root@localhost ~]# awk '{print $0}' test.txt 11 22 33 44
awk 'NR==n,NR==m {print}' 文件名
輸出第n行至第m行的內容bash
[root@localhost ~]# awk 'NR==1,NR==3 {print $0}' test.txt 11 22 33
awk '(NR>=n) && (NR<=m) {print}' 文件名
輸出第n行至第m行的內容app
[root@localhost ~]# awk '(NR>=1) && (NR<=3) {print}' test.txt 11 22 33
awk 'NR==n || NR==m {print}' 文件名
輸出第n行和第m行的內容運維
[root@localhost ~]# awk 'NR==1 || NR==3 {print}' test.txt 11 33
awk '(NR%2)==1 {print}' 文件名
輸出全部奇數行的內容dom
[root@localhost ~]# awk '(NR%2)==1 {print}' test.txt 11 33
awk '(NR%2)==0 {print}' 文件名
輸出全部偶數行的內容ssh
[root@localhost ~]# awk '(NR%2)==1 {print}' test.txt 22 44
awk '/^a/ {print}' 文件名
輸出以字符串a開頭的行
[root@localhost ~]# awk '/^3/ {print}' test.txt 33
awk '/a$/ {print}' 文件名
輸出以字符串a結尾的行
[root@localhost ~]# awk '/4$/ {print}' test.txt 44
awk 'BEGIN {x=0}; /^a/ {x++}; END {print x}' 文件名
輸出文件中以字符串a開頭行的數量
BEGIN模式表示,在處理指定的文本以前,須要先執行BEGIN模式中指定的動做;awk再處理指定的文本,以後再執行END模式中指定的動做,END{}語句塊中,每每會放入打印結果等語句。
[root@localhost ~]# awk 'BEGIN{X=0}; /^root/ {x++}; END{print x}' /etc/passwd 1 [root@localhost ~]# awk 'BEGIN{X=0}; /nologin$/ {x++}; END{print x}' /etc/passwd 39
awk -F ":" '{print $n}' 文件名
以:號爲分隔符,輸出每行的第n個字段
[root@localhost ~]# awk -F ":" '{print $1}' /etc/passwd root bin daemon adm lp sync shutdown halt mail operator games ftp nobody systemd-network dbus polkitd abrt libstoragemgmt rpc colord saslauth setroubleshoot rtkit pulse qemu ntp radvd chrony tss usbmuxd geoclue sssd gdm rpcuser nfsnobody gnome-initial-setup avahi postfix sshd tcpdump 123456 named dhcpd apache
awk -F ":" '{print $n,$m}' 文件名
以:號爲分隔符,輸出每行的第n個和第m個字段
[root@localhost ~]# awk -F ":" '{print $1,$3}' /etc/passwd root 0 bin 1 daemon 2 adm 3 lp 4 sync 5 shutdown 6 halt 7 mail 8 operator 11 games 12 ftp 14 nobody 99 systemd-network 192 dbus 81 polkitd 999 abrt 173 libstoragemgmt 998 rpc 32 colord 997 saslauth 996 setroubleshoot 995 rtkit 172 pulse 171 qemu 107 ntp 38 radvd 75 chrony 994 tss 59 usbmuxd 113 geoclue 993 sssd 992 gdm 42 rpcuser 29 nfsnobody 65534 gnome-initial-setup 991 avahi 70 postfix 89 sshd 74 tcpdump 72 123456 1000 named 25 dhcpd 177 apache 48
awk -F ":" '$n<m {print $n}' 文件名
以:號爲分隔符,當第n個字段小於m時,輸出第n個字段
[root@localhost ~]# awk -F ":" '$3<5 {print $1,$3}' /etc/passwd root 0 bin 1 daemon 2 adm 3 lp 4
awk -F ":" '!($n<m) {print}' 文件名
以:號爲分隔符,當第n個字段不小於m時,輸出整行內容
[root@localhost ~]# awk -F ":" '!($3<200) {print}' /etc/passwd polkitd:x:999:997:User for polkitd:/:/sbin/nologin libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin setroubleshoot:x:995:993::/var/lib/setroubleshoot:/sbin/nologin chrony:x:994:990::/var/lib/chrony:/sbin/nologin geoclue:x:993:988:User for geoclue:/var/lib/geoclue:/sbin/nologin sssd:x:992:987:User for sssd:/:/sbin/nologin nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin gnome-initial-setup:x:991:986::/run/gnome-initial-setup/:/sbin/nologin 123456:x:1000:1000:123456:/home/123456:/bin/bash
awk 'BEGIN {FS=":"}; {if ($n>=m) {print}}' 文件名
以:號爲分隔符,當第n列大於等於m時,輸出整行內容
[root@localhost ~]# awk 'BEGIN {FS=":"}; {if ($3>=1000) {print}}' /etc/passwd nfsnobody:x:65534:65534:Anonymous NFS User:/var/lib/nfs:/sbin/nologin 123456:x:1000:1000:123456:/home/123456:/bin/bash
awk -F ":" '{max=($n>=$m) ? $n : $m; {print max}}' 文件名
三元運算符。以:號爲分隔符,若是第n個字段的值大於等於第m個字段的值,則把第n個字段的值賦給max,不然把第m個字段的值賦給max
[root@localhost ~]# awk -F ":" '{max=($3>=$4) ? $3 : $4; {print max}}' /etc/passwd 0 1 2 4 7 5 6 7 12 11 100 50 99 192 81 999 173 998 32 997 996 995 172 171 107 38 75 994 59 113 993 992 42 29 65534 991 70 89 74 72 1000 25 177 48
awk -F ":" '{print NR,$0}' 文件名
以:號爲分隔符,處理每行內容和行號,沒處理完一條記錄,NR值加1
[root@localhost ~]# awk -F ":" '{print NR,$0}' /etc/passwd 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-network:x:192:192:systemd Network Management:/:/sbin/nologin 15 dbus:x:81:81:System message bus:/:/sbin/nologin 16 polkitd:x:999:997:User for polkitd:/:/sbin/nologin 17 abrt:x:173:173::/etc/abrt:/sbin/nologin 18 libstoragemgmt:x:998:995:daemon account for libstoragemgmt:/var/run/lsm:/sbin/nologin 19 rpc:x:32:32:Rpcbind Daemon:/var/lib/rpcbind:/sbin/nologin 20 colord:x:997:994:User for colord:/var/lib/colord:/sbin/nologin 21 saslauth:x:996:76:Saslauthd user:/run/saslauthd:/sbin/nologin 22 setroubleshoot:x:995:993::/var/lib/setroubleshoot:/sbin/nologin 23 rtkit:x:172:172:RealtimeKit:/proc:/sbin/nologin 24 pulse:x:171:171:PulseAudio System Daemon:/var/run/pulse:/sbin/nologin 25 qemu:x:107:107:qemu user:/:/sbin/nologin 26 ntp:x:38:38::/etc/ntp:/sbin/nologin 27 radvd:x:75:75:radvd user:/:/sbin/nologin 28 chrony: