歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux基礎 >> 關於Linux

快速掌握awk linux

基礎語法:

awk指令的基本格式是:awk [參數]‘awk程序’文件名

其中awk程序的主要結構是:pattern {action}

一般常使用“關系表達式”來當做pattern,例如:$1>4,$2==$3,"banana"~/an/ (

這是一個正則匹配的判斷關系式,若A為字符串,B為一個正在表達式,A~B(判斷字符串A是否包含能匹配B表達式的子字符串);A!~B(判斷字符串A是否不包含能匹配B表達式的子字符串))

action主要包括一些指令,如awk的i/o指令:print,printf,getline;awk的流程控制指令:if(...){...}else{...}, do{...}while();

awk程序為每個輸入行依次地進行每一個pattern的匹配尋找,對每一個匹配上的模式執行相應的action,接著讀取下一行並再次開始匹配,知道所有的輸入都處理完畢。

在一條語句中可以省略pattern或action,缺省的pattern為匹配所有行,缺省的動作為輸出當前行。awk從輸入中一次讀取一行(一條記錄),缺省的行分隔符為\n。然後awk將記錄分隔為一個個的字段,缺省的字段分隔為空白。一行中的第一個字段為$1,依次往後$2,$3...,整個記錄為$0。

awk的內建變量,可使用這些變量來取得相關信息,常見的有:

NF(Number of Fields):為一整數,其值表示$0所包含的字段數目。

NR(Number of Records):為一整數,其值表示awk已讀入的數據行數目。

FILENAME:正在處理的數據文件名。

更多的請大家參考http://www.jiayii.com/awk-tutorial/

基礎操作舉例:測試文件test.txt,內容如下:

 

 

 

(請注意裡面的空白有可能是空白,也可能是tab)

1。獲取所有John的成績單,可以用這些命令:

awk '/John/' test.txt(action默認輸出整行)

awk '/John/{print $0}' test.txt

awk '$2=="John"{print $0}' test.txt(默認以空白為分隔,$2既代表每行的第二個域)

awk '$2~/John/{print $0}' test.txt($2和正則表達式/John/匹配)

2。獲取成績大於120的成績單

awk '$3>=120' test.txt

3。如果原數據文件是以“,”分隔的,那麼所有的語句都可以增加分隔參數,如:awk -F"," /John/' test.txt(這就是-F的作用)


 

BEGIN和END

在awk中兩個特別的表單式,可用於pattern中,提供BEGIN和END是給程序賦予初始狀態和在程序結束之後執行一些掃尾工作。任何在BEGIN之後列出的操作將在awk開始掃描輸入之前執行,而END之後列出的操作將在掃描完全部的輸入之後執行。因此,通常使用BEGIN來顯示變量和預設初始值,使用END來輸出最終結果。

還是以上面的文件舉例:

1。將John的所有成績加和,可用命令如下:
 

 

 

2。默認初始成績為60,再將文件中的成績累加:
 

 

 

awk數組使用

awk數組使用字符串作為數組的下標;使用時不需要初始化;

實際應用數組運用也是最廣的,我們還是以test.txt為數據文件,分別計算各個成員的分數總計:

 


實際應用

在我使用awk的時候,往往是從線上撈取一些統計數據,而使用時往往這些日志文件都不是很規則,那你可以做的是,首先通過grep或者其他命令將文件轉換為一段具有一定規律的輸出,然後再使用awk進行處理。
 

Copyright © Linux教程網 All Rights Reserved