本篇 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
2echo "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 持續監看檔案輸出用法與範例