awk在bash中没有工作

时间:2013-09-27 02:30:46

标签: bash awk

下面的代码是简单版本,但也说明了问题。

版本有效:

df | awk -f <(cat - <<-'EOD'
{
    if(                                                                                                                                                                                       
        $1 == "tmpfs" ) {
            print $0;
        }
}
EOD
)

版本 工作:

df | awk -f <(cat - <<-'EOD'
{
    if( $1 == "tmpfs" ) {                                                                                                                                                                     
            print $0;
        }
}
EOD
)

区别在于我如何使用if,相同的行(工作)或不同的行(不工作)来放置条件。 生产版本有四个长条件,因此我必须将它们放在不同的行上以使代码更具可读性。有没有人进入过这个?

2 个答案:

答案 0 :(得分:4)

只需使用转义作为长if语句的行尾:

df | awk -f <(cat - <<-'EOD'
{
    if ( \
        $1 == "tmpfs" ) {
            print $0;
        }
}
EOD
)

awk语法显然希望if语句/表达式在一行上。在Unix / Linux中,通常能够使用反斜杠()作为行继续符。因此,它会将上面的if ( \和下一行视为在语法上处于同一行。

答案 1 :(得分:3)

@mbratch回答了你的问题,但另外,你发布的脚本:

df | awk -f <(cat - <<-'EOD'
{
    if( \
        $1 == "tmpfs" ) {
            print $0;
        }
    }
EOD
)

可以/应该写成:

df | awk '$1 == "tmpfs"'

如果你告诉我们你想要做什么,我们可能会提供更多帮助。