linux awk命令介紹

2021-08-20 10:40:42 字數 1409 閱讀 1295

通常來說 我們使用grep即可滿足我們大多數的需求了,但是還是有一些情況,grep是解決不了問題的,如我們的日誌中有服務的響應時間,想過濾出響應時間超過200ms掉日誌,這時候用grep就很難做到了。所以,很多時候我們還會使用到awk命令,awk命令是乙個功能十分強大的命令,學會awk命令對我們解決問題有很大幫助。說到這裡可能有人會想到sed命令,sed命令常常作用於一整行的處理,awk則比較傾向於將一行分成數個欄位來處理,目前我遇到的情況還是awk使用的頻率要高很多。

一.語法:awk '條件型別1 條件型別2 ...' filename

awk後面接兩個單引號並加上大括號{}來設定想要對資料進行的處理動作。awk可以處理後續接的檔案,也可以讀取來自前個命令的輸入。awk主要是處理每一行的字段內的資料,而預設的字段的分隔符為空格鍵或[tab]鍵。

二.使用介紹

舉例:9#7#0#0#0#0#127.0.0.1#kbih8i09cjk09bn89hilibhkkxzv8ou##-1#null#4.9#null#null#0befb78b1527676906653這裡我想取出檔名為test.log中的ip 127.0.0.1的話 可以使用awk -f '#' '' test.log 這裡的 -f 『#』表示將這個字串按照#分隔 如果不使用-f 則使用預設空格符分隔 分隔後列印第7條 這裡如果是$0表示整行 所以具體分隔內容是從1開始,如果我們想取出第二個數字 這裡是7 大於200的情況 可以使用awk -f '#' ')}',這樣如果日誌中存在第二個數字等於7的時候 就列印整行日誌

三.awk的處理流程是

1.讀入第一行,並將第一行的資料填入$0,$1,$2等變數中

2.依據條件型別的限制,判斷是否需要進行後面的動作

3.做完所有的動作與條件型別

4.若還有後續的"行"的資料,則重複1-3步驟,直到所有資料都處理完

四.awk中的內建變數

nf 每一行擁有的字段綜述

nr 目前awk處理的是第幾行資料

fs 目前的分隔字元 預設是空格鍵

五.awk的邏輯運算子

邏輯運算子主要包括 > < >= <= == != 很好理解,不做說明了 主要是==需要注意下

六.注意事項

1.所有awk的動作,即在{}內的動作,如果有需要多個命令輔助時,可利用';'間隔,或者直接以回車鍵隔開每個命令

2.邏輯運算中,等號需要使用==兩個等號

3.格式化輸出時,在printf的格式設定當中,務必加上\n,才能進行分行

4.與bash,shell的變數不同,awk中的變數可以直接使用,不需要加$符號

除此之外,awk還支援迴圈計算,感興趣的可以學習下。

參考:鳥哥的私房菜

Linux awk命令詳解

3.awk的執行過程 1 awk script的組成 awk script可以由一條或多條awk cmd組成,兩條awk cmd之間一般以newline分隔 awk cmd由兩部分組成 awk pattern awk script可以被分成多行書寫,必須確保整個awk script被單引號括起來。2...

linux awk命令學習

awk是一種功能很強大的程式語言,用於linux系統下文字和資料的處理。本篇文章只學習一些awk相關的常規應用,而不對awk的語法進行討論,如果有需要,直接查資料就好了。1.檢視特定程序的pid,sh ps pid tty time cmd 414 00 00 00 rcs 417 00 00 00...

linux awk命令詳解

awk 儘管操作可能會很複雜,但語法總是這樣,其中 pattern 表示 awk 在資料中查詢的內容,而 action 是在找到匹配內容時所執行的一系列命令。花括號 不需要在程式中始終出現,但它們用於根據特定的模式對一系列指令進行分組。pattern就是要表示的正規表示式,用斜槓括起來。awk 語言...