一般我們在使用awk的過程中,分隔符可以使用默認的空格(默認可以省略)和指定分隔符的方式。
默認格式:awk '{print $n}' filename #n爲字段值
如: echo "0 1 2 3 4 5 6"|awk '{print $2}' 1
指定分隔符的格式:awk -F':' '{print $n}' filename
或
awk -F: '{print $n}' filename #如按:分割,
如: awk -F':' '{print $5}' /etc/passwd awk -F: '{print $5}' /etc/passwd
有時候我們在應用的過程中可能存在多種類分隔符取數據,這個該怎麼辦呢?
可以使用-F'[ ]' 將分隔符放在中括號裏面或-F'分隔符1|分隔符2'來截取數據字段:
如:#下面就可以按空格和冒號分隔,取出我們需要的數據 echo "1:a 2:b 3:c 4:d" |awk -F'[ :]' '{print $2,$4,$6,$8}' a b c d echo "1:a 2:b 3:c 4:d" |awk -F' |:' '{print $2,$4,$6,$8}' a b c d
如果連續出現分隔符,那我們這樣取數據的時候會報錯
如:#我們在a後面再添加4個空格,這時候的結果就會出錯, echo "1:a 2:b 3:c 4:d" |awk -F'[ :]' '{print $2,$4,$6,$8}' a b
解決這個問題的辦法就是-F'[ ]+',用+號來將連續出現的分隔符當成一個來處理
echo "1:a 2:b 3:c 4:d" |awk -F'[ :]+' '{print $2,$4,$6,$8}' a b c d
#像下面這個可以直接取出網站外部鏈接過來導致的FIN_WAIT2的ip netstat -antp|grep "FIN_WAIT2"|awk -F'[ :]+' '{print $6}'