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}
。