“nawk if else else if else”不工作

时间:2014-09-05 09:29:06

标签: nawk

好吧,这很可能对你来说听起来像是一个愚蠢的问题,但是我无法让它发挥作用,即使在阅读了不少之后我也不知道自己做错了什么。 awk帮助网站:

    $ echo -e "hey\nthis\nworld" | nawk '{ if ( $1 !~ /e/ ) { print $0; } else if ($1 !~ /o/ ) { print $0; } else { print "condition not mached"; } }'
    hey
    this
    world
    $ 

我更喜欢将它放在一行上,但也试过多行,如各种例子所示:

    $ echo -e "hey\nthis\nworld" | nawk '{ 
    if ( $1 !~ /e/ )
    print $0;
    else if ($1 !~ /o/ )
    print $0;
    else
    print "condition not matched"
    }'
    hey
    this
    world
    $ 

提前感谢帮助一个新手!

我只想让只有不含某种图案的印刷线条在这里" e"或" o"。 最后的其他我只是为测试目的添加。

2 个答案:

答案 0 :(得分:0)

只需执行以下操作即可让您的生活更轻松:

echo "hey\nthis\nworld" | nawk '$1 !~ /e|o/'

你的情况出了什么问题:

$ echo -e "hey\nthis\nworld" | nawk '{ 
if ( $1 !~ /e/ ) #'this' and 'world' satisfy this condition and so are printed 
print $0; 
else if ($1 !~ /o/ ) #Only 'hey' falls through to this test and passes and prints
print $0;
else
print "condition not matched"
}'
hey
this
world
$ 

答案 1 :(得分:0)

FWIW正确的方法是使用三元表达式中的字符列表:

awk '{ print ($1 ~ /[eo]/ ? $0 : "condition not matched") }'

如果您使用awk标记问题而不仅仅是nawk(这是一个旧的,非POSIX和相对多余的awk变体),那么它们将会覆盖更广泛的受众。