如果条件只在awk中的某些列上运行,如何运行

时间:2015-03-20 15:16:59

标签: linux awk

我有一个包含列的文件,如下所示:

row1  0.15  0.03
row2  0.06  0.028
row3  0.05  0.05
row4    
row5        0.09    
row6    

如果col2 = col3中的值,我想通过删除行来过滤文件。这是一个安静的简单条件,写'$ 2 = $ 3'。但是,当应用$ 2 = $ 3条件时,col2和col3中具有空值的行也会被过滤。我希望这个条件只在有值的行上运行。示例输出如下所示。仅过滤第3行。即使也符合条件,它也没有任何整数值。

row1  0.15  0.03
row2  0.06  0.028
row4    
row5        0.09    
row6

我知道这很简单,但是当我尝试以下方式并且还有其他一些方法时它不起作用,它打印原始文件。

awk -F '\t' '$1!="" && $2!= "" {$1==$2}1' OFS="\t"

1 个答案:

答案 0 :(得分:3)

使用awk:

awk -F '\t' -v OFS='\t' '$2 == "" || $2 != $3' filename
  • 代码$2 == "" || $2 != $3只是一个条件,因此如果为真,则执行默认操作(打印)。
  • 无需对$3 == ""进行明确检查,因为在这种情况下$2 == ""$2 != $3为真。