如何根据另一列中的公共条目比较同一文件的列中的值

时间:2014-08-12 23:57:55

标签: awk

在我的文件中,$1中的每个条目都是重复的,但$2中的值是唯一的。我想比较$3中每个重复对的相应值,然后如果$3值更大,请对相应的行执行awk {print $1,$2}

File

A    ND       1
B    NE       6
C    NF       2
A    ND_upd   10
B    NE_upd   3
C    NF_upd   7

期望的输出:

A    ND_upd
B    NE
C    NF_upd

1 个答案:

答案 0 :(得分:1)

如果您在column1中的每个重复条目仅出现两次,那么以下内容就足够了:

awk -v OFS="\t" '
($1 in compare) { print ($3 > compare[$1] ? $1 OFS $2 : line[$1]); next }
                { compare[$1] = $3; line[$1] = $1 OFS $2 }
' file

如果column1可以复制2次以上,那么你需要构建一个数组,保持每个重复条目的最大值,并在END块中打印出来。

awk -v OFS="\t" '
($1 in compare) {
    if ($3 > compare[$1]) {
        compare[$1] = $3
        line[$1] = $1 OFS $2
    }
    next
}
{
    compare[$1] = $3; 
    line[$1] = $1 OFS $2
    key[++idx] = $1
}
END {
    for (i=1; i<=idx; i++) print line[key[i]]
}' file

输出:两种情况

A   ND_upd
B   NE
C   NF_upd