我正在尝试根据第二个字段的值删除重复项。第二字段的较低值应保留,第一字段重复且第二字段较高的行应删除。

这是我的原始数据的示例:

1234     2     ABCD
3234     1     DEFG
1234     1     DEFG

应该是这样的:
1234     1   DEFG
3234     1   DEFG

到目前为止,基于this post:我想出了这个脚本:
awk '{
    if($1 in a){
        if($2 < a[$1]){
            a[$1]= $2;
            r[$1]=$0;
        } else {
            a[$1]=$2;
            r[$1]=$0;
        }
    }
} end {for(x in r) print r[x]}'

但是它返回没有结果。

我仍在学习如何使用awk,尤其是关联数组。

欢迎任何帮助。提前致谢!

最佳答案

您可以使用以下awk:

awk '!($1 in a) || $2 < a[$1] {a[$1]=$2; r[$1]=$0} END {for (i in r) print r[i]}' file
1234     1     DEFG
3234     1     DEFG

关于linux - AWK根据两个条件删除重复的行,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32124270/

10-10 17:45