Linux awk 用法與範例

本篇 ShengYu 介紹 Linux awk 用法與範例,Linux awk 這個指令最常用來取得欄位資料,跟 cut 的功能很像。

echo 字串後 pipe 給 awk

以 ifconfig 的輸出為例,因為這個在我的經驗與實務中很常拿來處理取得 IP address,

假設 ifconfig 輸出如下,

1
2
3
$ ifconfig
eth0 Link encap:Ethernet HWaddr aa:bb:cc:dd:12:34
inet addr:192.168.1.2 Bcast:192.168.1.255 Mask:255.255.255.0

以空白作為分隔符號,之後取得結果的第二欄,

1
2
$ echo "inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0" | awk -F ' ' '{print $2}'
addr:192.168.1.2

接著再以:分號作為分隔符號,之後取得結果的第二欄,

1
2
$ echo "inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0" | awk -F ' ' '{print $2}' | awk -F ':' '{print $2}'
192.168.1.2

那能不能同時接受多個分隔符號呢?可以的!
結合上述兩個例子,以 [ :] 空白或分號作為分隔符號,之後取得結果的第三欄,

1
2
$ echo "inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0" | awk -F '[ :]' '{print $3}'
192.168.1.2

如果要取得欄位名稱為例,
取出 第一欄,

1
2
$ echo "inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0" | awk -F '[ :]' '{print $1,$2}'
inet addr

注意這邊加逗號的話中間會留一個空白,如果不加的話變這樣,

1
2
$ echo "inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0" | awk -F '[ :]' '{print $1$2}'
inetaddr

也可以這樣寫,也會留一個空白,

1
2
echo "inet addr:192.168.1.2  Bcast:192.168.1.255  Mask:255.255.255.0" | awk -F '[ :]' '{print $1" "$2}'
inet addr

其它相關文章推薦
Linux 常用指令教學懶人包
Linux cut 字串處理用法與範例
Linux find 尋找檔案/尋找資料夾用法與範例
Linux grep/ack/ag 搜尋字串用法與範例
Linux tee 同時螢幕標準輸出和輸出到檔案用法與範例
Linux xargs 參數列表轉換用法與範例
Linux tail 持續監看檔案輸出用法與範例