一个awk命令中``和`和`的多个条件

时间:2017-02-07 17:19:52

标签: bash awk

我试图在awk中使用多个'AND'和'OR'条件,但它没有给我所需的输出。相反,它不会读取我在时间'030000'时给出的最后@Bean public MongoMappingContext MongoMappingContext() { MongoMappingContext mappingContext = new MongoMappingContext(); mappingContext.setApplicationContext(applicationContext); return mappingContext; } 条件。

&&

2 个答案:

答案 0 :(得分:1)

看起来你错过了OR操作的括号。它应该是:

if(substr($2,1,3)=="301" && ($15=="996" || $15=="429") && $5>=030000 && $5<=035000) ...

请参阅boolean algebra

答案 1 :(得分:0)

在awk中,&&的优先级高于||,因此您的条件实际上意味着

    (substr($2,1,3)=="301" && $15=="996")
||
    ($15=="429" && $5>=030000 && $5<=035000)

$5的测试仅适用于$15=="429"为真的行,而不是示例输出行中的情况。

使用括号更改:

awk -F, '{if(substr($2,1,3)=="301" && ($15=="996" || $15=="429") && $5>=030000 && $5<=035000) print $2"|"$15"|"$5}' 2017020* | head -10

作为一般规则,即使不是绝对必要,我也总是用任何语言的混合逻辑AND和OR括起表达式。这有助于提高可读性并避免令人讨厌的意外(有些语言的AND和OR有不同的优先级。)。