2015-06-21 62 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

很好..再次感谢.. –