文字三劍客之awk
- 一、awk的概述
- 二、awk的應用一:按行輸出文字
-
三、awk的應用二:按欄位輸出文字
- 1、在指定分隔符下,輸出指定的欄位內容
- 2、awk結合if語句,輸出指定的欄位內容
- 3、awk結合三元運算子,輸出指定欄位的內容
- 4、輸出行號以及內容(跟sed輸出的行號對比)
- 5、在指定分隔符下,輸出包含指定內容的欄位內容
- 四、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時這樣做