我有以下文件:
A B 1990
A C 2001
A C 2013
A B 2001
B C 2013
A D 2001
A D 2014
我需要计算重复对(在第一列和第二列中),并为每个这样的对分配第三列中的最低值。对于我的玩具文件,输出应该是:
A B 2 1990
A C 2 2001
A D 2 2001
B C 1 2013
例如,pairA B
出现两次,第一次的值为 1990,第二次的值为 2001,因为 1990 < 2001 我们将 1990 分配给该计数。
我想知道如何使用 Linux 工具(Bash、AWK、Perl)来做到这一点。任何想法/指示将不胜感激。
答案1
尝试这个:
$ awk -v SUBSEP=" " '
{a[$1,$2]++;b[$1,$2] = (b[$1,$2] && $3 > b[$1,$2]) ? b[$1,$2] : $3}
END {
for (i in a) {
print i,a[i],b[i];
}
}
' file
A B 2 1990
A C 2 2001
A D 2 2001
B C 1 2013
如果您可以更改字段的顺序,甚至会更短:
$ sort -n -k1 -k2 -k3 file | uniq -c -w 3
2 A B 1990
2 A C 2001
2 A D 2001
1 B C 2013