Linux 如何仅在awk中的某些列上运行if条件

Linux 如何仅在awk中的某些列上运行if条件,linux,awk,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.

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

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"
使用awk:

awk -F '\t' -v OFS='\t' '$2 == "" || $2 != $3' filename
  • 代码
    $2==“”| |$2!=$3
    只是一个条件,因此如果为真,则执行默认操作(打印)
  • 不需要显式检查
    $3==”
    ,因为
    $2==”
    $2!=$3
    在这种情况下是正确的
    • 带awk:

      awk -F '\t' -v OFS='\t' '$2 == "" || $2 != $3' filename
      
      • 代码
        $2==“”| |$2!=$3
        只是一个条件,因此如果为真,则执行默认操作(打印)
      • 不需要显式检查
        $3==”
        ,因为
        $2==”
        $2!=$3
        在这种情况下是正确的
        • 带awk:

          awk -F '\t' -v OFS='\t' '$2 == "" || $2 != $3' filename
          
          • 代码
            $2==“”| |$2!=$3
            只是一个条件,因此如果为真,则执行默认操作(打印)
          • 不需要显式检查
            $3==”
            ,因为
            $2==”
            $2!=$3
            在这种情况下是正确的
            • 带awk:

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

              您的主要问题是
              {$1==$2}
              正在操作块内执行比较,因此该比较的结果没有作为条件进行测试,因此没有效果。请始终记住,awk是由
              {}
              语句组成的,因此您的意思类似于
              $1==$2{print}
              。您的主要问题是
              {$1===$2}
              正在操作块内执行比较,因此该比较的结果没有作为条件进行测试,因此没有效果。请始终记住,awk是由
              {}
              语句组成的,因此您的意思类似于
              $1==$2{print}
              。您的主要问题是
              {$1===$2}
              正在操作块内执行比较,因此该比较的结果没有作为条件进行测试,因此没有效果。请始终记住,awk是由
              {}
              语句组成的,因此您的意思类似于
              $1==$2{print}
              。您的主要问题是
              {$1===$2}
              正在操作块内执行比较,因此该比较的结果没有作为条件进行测试,因此没有效果。请始终记住,awk由
              {}
              语句组成,因此您的意思是
              $1==$2{print}