比较不匹配的列和打印值。

问题描述 投票:0回答:2

将第4列中的值与第5列和第6列进行比较,打印未找到的值。

如果第4列中存在NA值,则需要打印两个值(第5列和第6列)。

输入文件

1218885385520000 3240739773    VA     2 24 2 
1218917539980000 3195339725    VA    29 29 30 
1218894095580000 3241939989    VA     7 14 7 
1218892969380000 3242739701    VA    24 24 2 
1218894023580000 3198938973    VA    NA 4 9 
1218883439612000 3199739137    VA    16 16 18 
1218907932780000 3238539773    VA    NA 22 24
1218914177580000 3196739725    VA    29 29 30

预期产出

1218885385520000 3240739773    VA    24 
1218917539980000 3195339725    VA    30 
1218894095580000 3241939989    VA    14 
1218892969380000 3242739701    VA     2 
1218894023580000 3198938973    VA     4
1218894023580000 3198938973    VA     9 
1218883439612000 3199739137    VA    18 
1218907932780000 3238539773    VA    22
1218907932780000 3238539773    VA    24
1218914177580000 3196739725    VA    30

我试过了

awk '$4!=$5 $6 {print $4,"=",$5, $6}' FILE

提前致谢。

awk
2个回答
1
投票

由于NA从未出现在字段5或字段6中,您只需要:

$ awk '{for (i=5;i<=NF;i++) if ($4!=$i) print $1, $2, $3, $i}' file
1218885385520000 3240739773 VA 24
1218917539980000 3195339725 VA 30
1218894095580000 3241939989 VA 14
1218892969380000 3242739701 VA 2
1218894023580000 3198938973 VA 4
1218894023580000 3198938973 VA 9
1218883439612000 3199739137 VA 18
1218907932780000 3238539773 VA 22
1218907932780000 3238539773 VA 24
1218914177580000 3196739725 VA 30

如果NA可以出现在第5场或第6场,那么你只需要调整if来包括那个案例,即if ( ($4=="NA") || ($4!=$i) )


1
投票

你可以尝试一下吗?

awk '$4=="NA"{print $1,$2,$3,$5 ORS $1,$2,$3,$6;next} {val=$4>$5?$4:$5;print $1,$2,$3,(val>$6?val:$6);val=""}'  Input_file
© www.soinside.com 2019 - 2024. All rights reserved.