如果一对列与两个字符串都不匹配,如何打印行

如果一对列与两个字符串都不匹配,如何打印行

当我查看 1 列时,它已按预期工作:

cat /tmp/inputfile | awk -F : '$12 !~ /100/ { print $6,$12,$13}'
cat /tmp/inputfile | awk -F : '$12 ~ /100/ { print $6,$12,$13}'
4726753 100 137

但是,当我尝试在该过程中进行下一步时(查看 2 列并打印,如果该对不是“100 137”,它会在两个条件下打印。由于它同时满足两个条件(匹配和不匹配),所以它一定是无视我的条件吧?

cat /tmp/inputfile | awk -F : '$12,$13 ~ /100 137/ { print $6,$12,$13}'
4726753 100 137
cat /tmp/inputfile | awk -F : '$12,$13 !~ /100 137/ { print $6,$12,$13}'
4726753 100 137

修复/理解此问题是第 1 步。最终结果应检查“100 137”和“0 0”,并且仅在 $12、$13 都不是这些对时才打印。

答案1

如果我正确地阅读了您的问题,那么当且仅当字段 12 和 13 不是 (100, 137) 或 (0, 0) 时,您才会打印字段 6、12 和 13。所以:

awk -F: '! ( ( $12 == 0 && $13 == 0 ) || ( $12 == 100 && $13 == 137 ) ) { print $6, $12, $13 }' inputfile

相关内容