1. 程式人生 > 其它 >文字三劍客之awk

文字三劍客之awk

目錄

一、awk的概述

1、awk的概念

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

sed命令常用於一整行的處理,而awk比較傾向於將一行分成多個“欄位”然後再進行處理。awk資訊的讀入也是逐行讀取的,執行結果可以通過print的功能將欄位資料列印顯示

在使用awk命令的過程中,可以使用邏輯操作符“&&”表示“與”、“| |”表示“或”、“!“表示“非”;還可以進行簡單的數學運算,如+、-、*、/、%、^分別表示加、減、乘、除、取餘和乘方

$0 表示顯示整行 ,$NF表示當前行分割後的最後一列($0和$NF均為內建變數)

注意,$NF 和 NF 要表達的意思是不一樣的,對於awk來說,$NF表示最後一個欄位,NF表示當前行被分隔符切開以後,一共有幾個欄位

也就是說,假如一行文字被空格分成了7段,那麼NF的值就是7,$NF的值就是$7, 而$7表示當前行的第7個欄位,也就是最後一列,那麼每行的倒數第二列可以寫為$(NF-1)

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

FS∶ 列分割符。指定每行文字的欄位分隔符,預設為空格或製表位。與"-F"作用相同
NF∶ 當前處理的行的欄位個數。
NR∶ 當前處理的行的行號(序數)。
$0∶當前處理的行的整行內容。
$n∶ 當前處理行的第n個欄位(第n列)。
FILENAME∶ 被處理的檔名。
RS∶ 行分隔符。

二、awk的應用一:按行輸出文字

1、輸出全部內容


  

2、輸出指定行的內容

3、輸出奇數和偶數行的內容


  

4、輸出包含指定字元的行


  

5、awk包含兩種特殊的模式:BEGIN 和 END

5.1 兩種模式的概念

BEGIN 模式指定了處理文字之前需要執行的操作:

END 模式指定了處理完所有行之後所需要執行的操作:

BEGIN模式表示,在處理指定的文字之前,需要先執行BEGIN模式中指定的動作; awk再處理指定的文字,之後再執行END模式中指定的動作,END{}語句塊中, 往往會放入列印結果等語句

5.2 統計在文字中匹配到指定字元的次數


  

三、awk的應用二:按欄位輸出文字

awk -F 指定分隔符

FS∶ 列分割符。指定每行文字的欄位分隔符,預設為空格或製表位。與"-F"作用相同

1、在指定分隔符下,輸出指定的欄位內容


 

2、awk結合if語句,輸出指定的欄位內容

3、awk結合三元運算子,輸出指定欄位的內容

 

4、輸出行號以及內容(跟sed輸出的行號對比)


  

5、在指定分隔符下,輸出包含指定內容的欄位內容

$n~"字串"   ~代表欄位 包含 某個字串的作用
$n=="字串"  ==代表欄位 為 某個字串的作用
$n!="字串"  !=代表欄位 不為 某個字串的作用

四、awk的應用三

1、檢視記憶體使用情況,並輸出記憶體使用百分比

2、檢視當前CPU空閒率,(-b-n 1 表示只需要1次的輸出結果)

3、OFS詳解

OFS表示輸出時可設定改變分割符

  • $1=$1是用來啟用$0的重新賦值,也就是說
  • 欄位$1…和欄位數NF的改變會促使awk重新計算$0的值,通常是在改變OFS後而需要輸出$0時這樣做