linux awk命令
awk命令
命令作用:
awk命令的主要作用是對文字檔案進行處理。
語法格式:
awk [引數] [處理規則] [操作物件]
處理規則的流程:
處理規則的流程由先到後分別為 BEGUN{},//,{},END{}
BEGIN{}:指的是開始時執行
//:表示正則表示式
{}:表示迴圈
END{}:表示處理結束時執行
生命週期:
1.從處理檔案中讀取一行資料
2.將讀取的資料進行分解
3.根據處理規則處理資料
4.將處理好的資料複製給$0,直至處理結束。
5.如果有END{}處理規則則執行
grep、sed和awk的處理過程相似,都是讀一行就處理一行直至結束。
優點在於在處理大檔案時節省記憶體。
awk中的預定義變數:
$0:完整的輸入記錄
$n:當前記錄的第n個欄位
NF:當前記錄的欄位數
NR:已讀取的行的數量,也就是行號
FS:指定分隔符,預設是空格
OFS:指定輸出欄位分隔符,預設值也是空格
awk中的格式化輸出
格式化輸出命令:printf
%s:表示字串
%d:表示數字
- :表示左對齊
+ :表示右對齊
n :表示佔用n個字元長度(當超過字元長度時會失效)
案例:顯示第一個欄位和最後一個欄位,左對齊,佔用5個字元
awk中的引數
-F:指定分隔符,預設是空格
當同時以FS指定分隔符時,優先使用FS。
案例:輸出行號,第一列和最後一列的內容,行號後加&&,第一列後加||
awk中的定位方式
1.正則表示式
正則表示式表示使用正則表示式來定位的方式
2.條件表示式
條件表示式表示使用運算子(如>,<,=等)或其他條件來定位資料的方式。
當比較的是字母時比較的是ASCII碼
特殊的:~表示使用正則表示式,!~表示取反
案例:輸出第三列比第四列大的行
3.邏輯表示式
邏輯表示式表示利用邏輯運算來定位資料
字元:
&&:邏輯與
| | :邏輯或
! :邏輯非
案例:輸出首列字母為a或者第二列字母為w的行
4.算數表示式
算數表示式表示使用算數運算子(如+,-,/,*)來定位資料
案例:列印奇數行
5.範圍表示式
範圍表示式表示選擇從滿足第一條正則表示式的行到滿足第二條正則表示式的行
案例:列印從a開頭的行到h的行
流程控制
流程控制指條件語句與迴圈語句,他們只能在迴圈{}中使用。
1.if語句
if語句表示判斷,根據條件分為三種語句格式:
單分支:if(){}
雙分支:if(){}else{}
多分支:if(){}else if(){}...else{}
案例:如果是以a開頭的行就輸出整行,如果是q開頭的行就輸出行尾,否則就輸出!號
2.for語句
for語句表示當滿足條件時迴圈列印。
應注意不要變成死迴圈。
格式:for(變數賦值;條件判斷;變數值變化){}
案例:將檔案內每行列印3次
3.while語句
while語句與for類似,也是迴圈語句的判斷
格式:while(條件判斷){}
案例:將檔案的每行列印3次