Linux三劍客awk的應用對比案例詳解
awk的格式
一
awk 參數 ‘條件’(單引號) 文件路徑
a.參數我們一般用-F “[]” (雙引號) 指定分隔符
b.條件 為BEGIN 模塊 + 模式{條件} + END模塊
b1.BEGIN模塊在執行awk讀取文件之前就執行,一般用來定義我們的內置變量,awk必須在輸入文件進行任何處理前先執行BEGIN裏的動作(action)。
b2.模式{條件}模式就是我們需要查找的範圍。模式可以通過正則表達式模式,比較式模式,範圍式模式,特殊的模式即BEGIN和END共計四種模式。
條件就是我們在查找的範圍裏的某一個指定的條件
b3.END模塊
在awk讀取完所有的文件的時候,再執行END模塊,一般用來輸出一個結果(累加,數組結果),也可以是和BEGIN模塊類似的結尾標識信息
awk的格式
一
awk 參數 ‘條件’(單引號) 文件路徑
a.參數我們一般用-F “[]” (雙引號) 指定分隔符
b.條件 為BEGIN 模塊 + 模式{條件} + END模塊
b1.BEGIN模塊在執行awk讀取文件之前就執行,一般用來定義我們的內置變量,awk必須在輸入文件進行任何處理前先執行BEGIN裏的動作(action)。
b2.模式{動作}模式就是我們需要查找的範圍是以行為單位。模式可以通過正則表達式模式,比較式模式,範圍式模式,特殊的模式即BEGIN和END共計四種模式。
動作就是我們在查找的範圍裏的某一個指定的條件以列為單位
b3.END模塊
在awk讀取完所有的文件的時候,再執行END模塊,一般用來輸出一個結果(累加,數組結果),也可以是和BEGIN模塊類似的結尾標識信息
Awk的正確書寫格式為
例:awk -F “[]”‘BEGIN{ } 模式{ } END{ }’ 文件路徑
下面我們結合案例詳細說明awk的使用
首先我們創建一個文件
測試文件
- Zhang Dandan 41117397 :250:100:175
- Zhang Xiaoyu 390320151 :155:90:201
- Meng Feixue 80042789 :250:60:50
- Wu Waiwai 70271111 :250:80:75
- Liu Bingbing 41117483 :250:100:175
- Wang Xiaoai 3515064655 :50:95:135
- Zi Gege 1986787350 :250:168:200
- Li Youjiu 918391635 :175:75:300
- Lao Nanhai 918391635 :250:100:175
說明:
- 第一列是姓氏
- 第二列是名字
- 第一列第二列合起來就是姓名
- 第三列是對應的ID號碼
- 最後三列是三次捐款數量
- 我們創建完文件以後我們幹什麽?
- 我們要先知道awk是按列取數據最方便的
練習題1:顯示姓Zhang的人的第二次捐款金額及她的名字
首先我們要先找到姓張的人awk –F “[ :]”指定分割符為空格和冒號:把內容分割成一列一列的
‘/Zhang/{print $1,$5}‘ 在正則裏我們學過//裏的內容為需要過濾的內容{}裏的print為輸出的意思$2和$5就是第一列和第五列
練習題2:顯示Xiaoyu的名字和ID號碼
練習題3:顯示所有以41開頭的ID號碼的人的全名和ID號碼
$3~是指定第三列擁有正則的能力
練習題4:顯示所有以一個D或X開頭的人名全名
練習題5:顯示所有ID號碼最後一位數字是1或5的人的全名
.練習題6:顯示Xiaoyu的捐款,每個值都有以$開頭。如$ 520$135
.
練習題7:顯示所有人的全名,以姓,名的格式顯示,如Meng,Feixue
多模式多動作
這裏我們說一下xargs -l1
Xargs會把管道傳遞過來的stdin裏的換行符,空白換成空格取代,形成一行作為整體輸出:
如果不指定分批選項(-i,-L,-n),Xargs的一整行結果將作為一個整體輸出,而不是分隔開的!
分割選項:-d ,-0 | 分批選項: -n,-L,-i/-I | 使用-p或-t來觀察命令的執行過程
BEGIN模塊
在我們執行awk讀取文件之前就執行一般用來定義我們的內置變量
因為awk默認的讀入換行符和輸出換行符都市\n
我們可以通過BEGIN來給他變換一下值
例;
我們也可以讓BEGIN指定輸出符號
我們還可以指定變量
還可以進行計算
也可以在文件輸出的時候作為輸出表頭使用我們應該知道awk在執行的時候先執行BEGIN模塊
通過以上案例我們可以得出在沒有文件的條件awk依舊可以處理BEGIN模式下的動作(命令)
END模塊:
END在awk讀取玩所有的文件的時候,在執行END模塊,一般用來輸出一個結果(累加。數組的結果)也可以和BEGIN一樣 的意思在結尾給文件進行結尾語
例:
我們也可以用END進行運算輸出結果
awk數組
數組就是具有相同點或者說共同點比如ab.ac.ad.af.ag他們的共同點就是都有a
假如我們想用一種變量表示多組數據通常我們有優先考慮數組的形式
通過數組查看訪問量
Linux三劍客awk的應用對比案例詳解