次のファイルがあります。
A B 1990
A C 2001
A C 2013
A B 2001
B C 2013
A D 2001
A D 2014
最初の列と2番目の列の冗長ペアを計算し、各ペアに3番目の列の最も低い値を割り当てる必要があります。私のおもちゃファイルの場合、出力は次のようになります。
A B 2 1990
A C 2 2001
A D 2 2001
B C 1 2013
たとえば、ペアはA B
2回表示されます。最初は値が1990で、2番目は値が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