2015-06-21 60 views
0

awk的默認分隔符空間對待兩個領域之間的等價空間的任何量..AWK - 增加一個新的分隔符爲默認的空間分隔

echo "1 2"|awk '{for (i=1;i<=NF;i++) print $i}' 
#which gives the result (two spaces between 1 and 2) 
1 
2 

如何添加「=」這個現有分隔符?我已經嘗試了以下內容,並開始將「單個」空格字符視爲分隔符,並破壞了上述結果。

echo "1 2"|awk -F"[ |=]" '{for (i=1;i<=NF;i++) print $i}' 
    #which gives the result 
    1 

    2 

如何在這裏給出任意數量的空間作爲分隔符?提前致謝。

回答

2

你可以指定一個正則表達式作爲分隔符:

echo "1 2"|awk -F"[ |=]+" '{for (i=1;i<=NF;i++) print $i}' 

這也意味着

echo "1 2 3==5"|awk -F"[ |=]+" '{for (i=1;i<=NF;i++) print $i}' 

將打印

1 
2 
3 
5 
+0

精彩!是的,我已經從其他線程讀取了有關分隔符的正則表達式,但是看起來** + **在這裏完成了這個技巧。它正在考慮多個空格,多個「=」符號(在第二個案例中非常好的例子,說明了這兩個點,BTW)。 ** + **在這裏做什麼? –

+1

'+'用於指定正則表達式的*一個或多個匹配項*。所以它會結合多個分隔符。又如:'回聲 「1 == | = 2」 | AWK -F 「[| =] +」 '{對於(I = 1; I <= NF;我++)打印$ I}''將打印'1 ' –

+0

很好..再次感謝.. –