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

时间:2018-09-08 05:05:38

标签: awk

将第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

谢谢。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分: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) )