AWK
一、NF $NF
$NF 代表:最後一個列(field)
NF 代表:瀏覽記錄的域個數
ls -l |awk '/^d/ {print $NF}'
查看當前目錄下的所有目錄文件
[root@lee1 opt]# cat a 1.2.3.4.5 [root@lee1 opt]# awk -F . '{print NF}' a 5
二、FS OFS
FS 輸入字段分隔符(缺省爲:space:),相當於-F選項
OFS輸出字段分隔符(缺省爲:space:)
[root@lee1 opt]# cat a 1.2.3.4.5 [root@lee1 opt]# awk -F . '{print NF}' a 5 [root@lee1 opt]# awk -F . 'BEGIN {OFS="/"}{NF=5;print $0}' a 1/2/3/4/5
三、AWK匹配
有這樣需求:需要提取一個zip包中文件所在的目錄,就是文件所在的上層目錄的絕對路徑
比如 a/b/c.sh c.sh文件的路徑就是 a/b
zip包的內容如下 :
unzip -l game.zip |awk '/game\//&& !/\/$/ {print $4}' | awk -F / 'BEGIN {OFS="/"}{NF=NF-1;print $0}'
awk中的匹配段的內容意思是:找到有“game/” 且不以“/” 結尾的行
查看結果:
四 數組
awk的數組,一種關聯數組,下標可以是數字和字符串。因無需對數組名和元素提前聲明,也無需指定元素個數
有這樣的需求:有兩列數據,第一列爲用戶名,第二列爲數值,計算出總值,並按第二列的值排序
[root@lee1~]#cat a a 1 b 11 c 123 a 2 v 3 c 245 b 235 [root@lee1~]#awk '{name[$1]+=$2} END{for(i in name) { if(name[i] != null)print i , name[i]}}' a | sort -n -k2 -r c 368 b 246 v 3 a 3