字串處理工具: Awk

AWK 的名字由來是三位作者的姓氏 — “Aho, Weinberger 及 Kernighan”, AWK 是一種專門處理文字的直譯語言。AWK 會把檔案逐行讀入, 並預設以空格作為分隔符號, 將一行字串分割成不同欄位, 第一個欄位用 $1 表示, 第二個用 $2, 如此類推, 而 $0 則表示整行資料, 這樣可以更好的分析處理。

除了對檔案進行分析外, 跟其他 Linux 工具一樣, awk 同樣可以讀取管線輸入。

不論在指令模式或者撰寫 Shell Script 時, awk 也十分有用,以下是 Awk 的使用例子:

# awk ‘{ print }’ /etc/passwd

以上指令將 /etc/passwd 作為 awk 的輸入檔案,並會將 /etc/passwd 檔案的內容逐行輸出。但這樣使用 awk 看不出它的作用,以下是另一個例子:

# awk -F”:” ‘{ print $1 }’ /etc/passwd


以上例子使用 awk 時加入了 -F 選項,並指定每一行用 “:” 作為分隔字串。而 print $1 的意思是印出分隔後的第一組字串。輸出結果是系統所有帳號的使用者名稱。

如果將 awk 用管線 (pipe) 和其他指令配合的話,作用會更加大,例如用 “ls -l /etc” 的話,會將/etc 的內容及其他檔案/目錄資料印出,但我不想看建立日期及檔案體積等資訊,只要看檔案/目錄及其權限,可以這樣做:

# ls -l /etc | awk ‘{print $1 “t” $9}’

因為 awk 預設會用 tab 或空白字串作為分隔,所以今次不用 -F 選擇。以上會將 “ls -l /etc” 的輸出作為 awk 的輸入內容,而會印出分隔後第一及第九組字串,兩個字串中間會用 “t” 分開。


Leave a Reply