首页 > 解决方案 > awk 在数字列上过滤,但仅当其他字符串列等于某个值时

问题描述

我想排除 col1 为“chr6”且 col2 介于 25000000 和 33500000 之间的行

有:

chr1 1000
chr6 24000000
chr6 26000000
chr6 27000000
chr6 40000000
chr7 100000

想:

chr1 1000
chr6 24000000
chr6 40000000
chr7 100000

我觉得它应该是这样的事情的反面,但不知道如何到达那里

awk '$1 = 'chr6 && $2 > 25000000 && $2 < 33500000'

标签: unixawk

解决方案


您可以使用以下awk程序。

awk '!($1 == "chr6" && $2 > 25000000 && $2 < 33500000)' Input_file

或者:

awk '($1 == "chr6" && $2 > 25000000 && $2 < 33500000){next} 1' Input_file

OP 尝试中的修复:

  • 您正在使用=应在此处使用的赋值运算符==将其作为条件。
  • 然后您想排除与条件匹配的结果,因此您需要在!此处使用运算符来避免那些实际匹配所有条件的结果。
  • '不允许'awk.
  • 围绕字符串值进行字符串比较"(考虑到它不是变量)。

推荐阅读