在Linux/UNIX系統中,awk是一個功能強大的編輯工具,逐行讀取輸入文本,並根據指定的匹配模式進行查找,對符合條件的內容進行格式化輸出或者過濾處理,能夠再無交互的狀況下實現至關複雜的文本操做,被普遍應用於Shell腳本,完成各類自動化配置任務。java
1.awk常見用法:
一般狀況下 awk 所使用的命令格式以下所示,其中,單引號加上大括號「{}」用於設置對數據進行的處理動做。awk 能夠直接處理目標文件,也能夠經過「-f」讀取腳本對目標文件進行處理。vim
查出/etc/passwd的用戶名等列,執行以下命令bash
[root@localhost ~]# awk -F ':' '{print $1,$3,$4}' /etc/passwd root 0 0 bin 1 1 daemon 2 2 //如下省略多行
FS:指定每行文本的字段分隔符,默認爲空格或製表位。 NF:當前處理的行的字段個數。 NR:當前處理的行的行號(序數)。 $0:當前處理的行的整行內容。 $n:當前處理行的第 n 個字段(第 n 列)。 FILENAME:被處理的文件名。 RS:數據記錄分隔,默認爲\n,即每行爲一條記錄。
按行輸出文本:dom
[root@localhost ~]# awk 'NR==1,NR==3{print}' /etc/passwd root:x:0:0:root:/root:/bin/bash bin:x:1:1:bin:/bin:/sbin/nologin daemon:x:2:2:daemon:/sbin:/sbin/nologin [root@localhost ~]# awk -F ":" 'NR==1,NR==3{print $1,$3}' /etc/passwd root 0 bin 1 daemon 2 [root@localhost ~]# awk -F ":" '(NR>=1)&&(NR<=3){print $1,$3}' /etc/passwd root 0 bin 1 daemon 2
奇數行: [root@localhost ~]# awk -F ":" 'NR%2==1{print $1,$3}' /etc/passwd root 0 daemon 2 lp 4 shutdown 6 mail 8 games 12 nobody 99 dbus 81 abrt 173 rpc 32 saslauth 996 pulse 171 rpcuser 29 ntp 38 usbmuxd 113 qemu 107 setroubleshoot 993 gdm 42 sshd 74 postfix 89 zhou 1000 named 25 偶數行: [root@localhost ~]# awk -F ":" 'NR%2==0{print $1,$3}' /etc/passwd bin 1 adm 3 sync 5 halt 7 operator 11 ftp 14 systemd-network 192 polkitd 999 libstoragemgmt 998 colord 997 rtkit 172 chrony 995 nfsnobody 65534 tss 59 geoclue 994 radvd 75 sssd 992 gnome-initial-setup 991 avahi 70 tcpdump 72 dhcpd 177
[root@localhost ~]# awk '/^root/{print}' /etc/passwd root:x:0:0:root:/root:/bin/bash
[root@localhost ~]# awk 'BEGIN {x=0} ; /\/bin\/bash$/{x++};END {print x}' /etc/passwd 2
[root@localhost opt]# vim name.txt zhangsan:lisi:wangwu zhaoliu:liuliu heiba:heihei [root@localhost opt]# awk 'BEGIN{RS=":"};END{print NR}' /opt/name.txt 5 //統計規則:遇到關鍵符號,折行
[root@localhost opt]# awk -F ":" '$3=="0"{print}' /etc/passwd root:x:0:0:root:/root:/bin/bash [root@localhost opt]# awk -F ":" '$3=="0"{print $1,$7}' /etc/passwd root /bin/bash 輸出密碼爲空的用戶的shadow記錄: [root@localhost opt]# awk 'BEGIN{FS=":"};$3=="0"{print}' /etc/passwd root:x:0:0:root:/root:/bin/bash 輸出以冒號分隔且第7個字段包含bash: [root@localhost opt]# awk -F : '$7~"bash"{print}' /etc/passwd root:x:0:0:root:/root:/bin/bash zhou:x:1000:1000:zhou:/home/zhou:/bin/bash 以冒號爲分隔,輸出第一個字段包含nfs且總字段數爲7的第1,3,7字段 方法一:[root@localhost opt]# awk -F : '($1~"nfs")&&(NF==7){print $1,$3,$7}' /etc/passwd nfsnobody 65534 /sbin/nologin 方法二:[root@localhost opt]# awk 'BEGIN{FS=":"};($1~"nfs")&&(NF==7){print $1,$3,$7}' /etc/passwd nfsnobody 65534 /sbin/nologin 以冒號爲分隔,第七個字段不包含/sbin/nologin且總字段爲7的,1,3,7字段 [root@localhost opt]# awk 'BEGIN{FS=":"};($7!="/sbin/nologin")&&(NF==7){print $1,$3,$7}' /etc/passwd root 0 /bin/bash sync 5 /bin/sync shutdown 6 /sbin/shutdown halt 7 /sbin/halt zhou 1000 /bin/bash named 25 /bin/false
[root@localhost opt]# awk -F : '/bash$/{print | "wc -l"}' /etc/passwd 2
[root@localhost opt]# awk 'BEGIN {while ("w" | getline) n++;{print n-2}}' 1
[root@localhost opt]# awk 'BEGIN {"hostname" | getline ; print $0}' localhost.localdomain
在 Linux 系統中,經常使用的文件排序工具備三種:sort、uniq、wc, 其中sort 是一個以行爲單位對文件內容進行排序的工具,也能夠根據不一樣的數據類型來排序。例如數據和字符的牌局就不同。sort 命令的語法爲「sort [選項] 參數」,其中經常使用的選項包括如下幾種。ssh
-f:忽略大小寫tcp
-b:忽略每行前面的空格ide
-M:按照月份進行排序工具
-n:按照數字進行排序post
-r:反向排序code
-u:等同於 uniq,表示相同的數據僅顯示一行
-t:指定分隔符,默認使用[Tab]鍵分隔
-o <輸出文件>:將排序後的結果轉存至指定文件
-k:指定排序區域
Uniq 工具在 Linux 系統中一般與 sort 命令結合使用,用於報告或者忽略文件中的重複行。具體的命令語法格式爲:uniq [選項] 參數。其中經常使用選項包括如下幾種。
-c:進行計數
-d:僅顯示重複行
-u:僅顯示出現一次的行