다음 파일이 있습니다.
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
예를 들어 pair는 A 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