1. 程式人生 > 其它 >Shell——awk文字和資料處理程式語言

Shell——awk文字和資料處理程式語言

一、awk工作原理

  逐行讀取文字,預設以空格或tab鍵為分隔符進行分隔,將分隔所得的各個欄位儲存到內建變數中,並按模式或者條件執行編輯命令。

  sed命令常用於一整行的處理,而awk比較傾向於將一行分成多個“欄位”然後再進行處理。awk資訊的讀入也是逐行讀取的,執行結果可以通過print的功能將欄位資料列印顯示。在使用awk命令的過程中,可以使用邏輯操作符“&&”表示“與”、“||”表示“或”、“!”表示“非”;還可以進行簡單的數學運算,如+、-、*、/、^分別表示加、減、誠、除、取餘和乘方。

二、命令格式

awk 選項 '模式或條件(操作)' 檔案1 檔案2 …
awk -f 指令碼檔案 檔案1 檔案2 …

  awk後面接兩個單引號並加上大括號{ }來設定想要對資料進行的處理操作,awk可以處理後續接的檔案,也可以讀取來自前個命令的標準輸,但如果awk主要是處理每一行的欄位內的資料時,預設的欄位分隔符為“空格鍵”或“Tab鍵”

1、常見的內建變數(可直接使用)

FS∶ 列分割符。指定每行文字的欄位分隔符,預設為空格或製表位。與"-F"作用相同 NF∶ 當前處理的行的欄位個數。 NR∶ 當前處理的行的行號(序數)。 $0∶當前處理的行的整行內容。 $n∶ 當前處理行的第n個欄位(第n列)。 FILENAME∶ 被處理的檔名。 RS∶ 行分隔符。awk從檔案上讀取資料時,將根據RS的定義把資料切割成許多條記錄,而awk一次僅讀入一條記錄,以進行處理。預設值是’\n’ FNR:awk當前讀取的記錄數,其變數值小於等於NR(比如當讀取第二個檔案時,FNR是從0開始重新計數,而NR不會)。 NR==FNR:用於在讀取兩個或兩個以上的檔案時,判斷是不是在讀取第一個檔案。
BEGIN模式表示,在處理指定的文字之前,需要先執行BEGIN模式中指定的動作; awk再處理指定的文字,之後再執行END模式中指定的動作; END{ } 語句塊中,往往會放入列印結果等語句。