天天看點

awk指令的應用例子

awk功能與sed相似,都是用來進行文本處理的,awk語言可以人檔案或字元串中基于指定規則浏覽和抽取資訊,在抽取資訊的基礎上,才能進行其他文本操作。

我們可以把awk形容為一把剪刀,可以截取某個文本内容的指定區域字元

awk程式設計模型

第一階段:讀取輸入檔案之前,由BEGIN辨別

第二階段:主輸入循環,對每個輸入檔案進行處理

第三階段:讀取輸入檔案完畢,由END辨別

awk調用方法:

格式:awk -F[區域分隔符] ‘{awk程式段}’ 輸入檔案

awk程式段可以是print或其它指令參數

如果不加上-F,則以空格為分隔符

列印出第一區域的字段,這裡不加-F則以空格做分隔符

這段的/^$/ 指的是空白行,即從頭到結尾都是空内容,即代表空行,當區域到的行是空白行後,就打字h的字元

最常用的區域列印,如abc檔案中内容有多個域,可以了解為段落,以空格或tab隔開

原理:

111222 333 aaaa 555

111到aaaa之間是以空格來隔開,aaaa到555是以tab來隔開,這裡每個隔開的地方可以稱為字元的區域字段

即111為第1區域,222為第2區域,555為第5區域

因為abc第三行隻有1個區域,是以列印出來效果會是個空行

列印多區域則:awk ‘{print $1,$4}’ abc 這樣就能列印出第1和第4區域字段

awk還可以以變量方法來定義列印

定義了a和b的變量,最後a+b=3,即列印出第3區域

-F為指定分隔符,可以指定任何字元為分隔如,如-F: -F, -Fa -F/ 等等

但-F”\t”是以tab鍵為分隔符,這裡\t有特殊的意義

以:為分隔符,列印出第2區域,剛好第2區域是win

使用FS改變分隔符”:” ,列印出第1區域為root的行,其中~為正規表達式符号

其實FS=”:”這種寫法相當于-F:

表達式:如比對abc檔案中有多少空行,則執行表達式x+=1(x=x+1)

結果就會列印出1和2,相當是1,然後再1+1=2,因為比對出有2個空行

awk比較常用的例子:

截取整段IP

檢視根分區的已使用比率

這裡注意了,用grep過濾出/,後面要加上$,代表/後面是空字元,這樣才過濾出單獨根分區的那一行出來,然後再通過awk去截取區域的字段

檢視系統中UID的使用者數量,而且UID要大于80,要從小到大排序

sort指令用于排序,後面再詳細解釋

先設定條件用if,指定第3區域,即/etc/passwd檔案中的UID區域的字元數字大于80,然後再列印出第1和第3區域内容,然後進行有序排列

由于awk的功能十分強大,筆者學習能力有限,隻介紹到這裡,詳細可以參考有關的書籍