關于awk
awk是一個報告生成器,他擁有強大的文本格式化的能力。
其實我么可以利用awk命令將一些文本整理成我們想要的樣子,比如把一些文本整理成“表”的樣子。然后打印出來,至于格式化能力會舉例出來,自然會明白。
awk是有Alfred Aho,Peter Weinberger好人Brian Kernighan 這三人創造的,awk由這三個人的姓氏的首個字母組成。
awk早期是在unix上實現的,所以,我們現在在linux中所使用的AWK其實是gawk,也就是GNU awk,簡稱gawk,awk還有一個版本,New awk,簡稱nawk,但是linux中最常用的還是gawk。
awk其實是一門編程語言,它支持調節判斷,數組,循環等功能。所以,我們也可以把awk理解成一個腳本編譯解釋器。
grep,sed,awk被稱為linux中的“三劍客”。
我們總結一下這三個“劍客”的特長。
grep更適合單純的查找或匹配文本。
sed 更適合編輯匹配到的文本。
awk更適合格式化文本,對文本進行較復雜格式處理。
awk基礎
awk基本語法:awk[options] ‘Patter{Action}’ file
其中Action指的就是動作awk擅長文本格式化,并且將格式化以后的文本輸出,所以awk最常用的動作就是print和printf,
先舉個簡單的例子不用[options],也不知道pattern,直接用最簡單的action。如下:
上圖我們只是使用了awk執行一個打印的動作,將testd文件內容打印出來。
在換個例子:
上圖中沒有使用option和pattern,上圖中的awk‘{print$5}’ 表示輸出df的信息的第5列,$5表示將當前行按照分隔符分割后的第5列,不指定分隔符時,默認使用空格作為分隔符,你一定發現了上述信息用的空格不止有一個,而是連續多個空格,awk自動將連續的空格理解為一個分割符了。
awk是逐行處理的,逐行處理就是說,當awk處理一個文本時,會一行一行進行處理,處理完當前行,在處理下一行,awk默認以“換行符”為標記,識別每一行,也就是說,awk跟我們人類一樣,每次遇到“回車換行”,就認為是當前行的結束,新的一行的開始,awk會按照用戶指定的分割符去分割當前行,如果沒有指定分隔符,默認使用空格作為分隔符。
我們也可以一次輸出多列,使用逗號隔開要輸出的多個列,如下,一次性輸出第一列和第二列
同理,也可以一次性輸出多個指定的列,如下
我們發現第一行并沒有第5列,所以沒有輸出任何文本,而第二行有第5列,所以輸出了。
未完待續!
原創文章,作者:eedsxb,如若轉載,請注明出處:http://www.www58058.com/86397
求繼續更新?。?!