我试图在awk中使用多个'AND'和'OR'条件,但它没有给我所需的输出。相反,它不会读取我在时间'030000'时给出的最后@Bean
public MongoMappingContext MongoMappingContext() {
MongoMappingContext mappingContext = new MongoMappingContext();
mappingContext.setApplicationContext(applicationContext);
return mappingContext;
}
条件。
&&
答案 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有不同的优先级。)。