
많은 열이 포함된 탭으로 구분된 파일이 있습니다.
1 A 10 1.94E-31 N/A N/A bat
1 B 20 1.94E-31 N/A N/A bear
1 C 12 1.94E-31 N/A N/A dear
1 D 36 1.94E-31 N/A N/A quinoa
1 R 55 1.94E-31 N/A N/A quinoa
2 E 48 1.94E-31 N/A N/A cat
2 F 62 1.94E-31 N/A N/A cat
2 G 49 1.94E-31 N/A N/A dog
2 H 13 1.94E-31 N/A N/A whale
3 I 28 1.94E-31 N/A N/A snake
3 J 95 1.94E-31 N/A N/A lion
3 K 64 1.94E-31 N/A N/A elephant
3 L 38 1.94E-31 N/A N/A dog
3 M 19 1.94E-31 N/A N/A fox
3 N 97 1.94E-31 N/A N/A eagle
3 O 84 1.94E-31 N/A N/A parrot
3 P 64 1.94E-31 N/A N/A insect
3 Q 13 1.94E-31 N/A N/A shark
3 R 49 1.94E-31 N/A N/A rat
열 3에 고유 ID 수가 가장 많은 행을 유지하고 싶습니다.
1 R 55 1.94E-31 N/A N/A quinoa
2 F 62 1.94E-31 N/A N/A cat
3 N 97 1.94E-31 N/A N/A eagle
내 실제 파일에는 헤더가 있고 열 3에는 소수점이 포함된 숫자가 포함되어 있습니다.
답변1
$ awk -F'\t' 'NR==1 {print ; next};
$3 > largest[$1] { largest[$1]=$3; line[$1] = $0 };
END { for (id in largest) { print line[id] }}' input.txt
1 R 55 1.94E-31 N/A N/A quinoa
2 F 62 1.94E-31 N/A N/A cat
3 N 97 1.94E-31 N/A N/A eagle
이 awk 스크립트는 두 개의 배열을 사용합니다. 하나는 각 ID($1)에 대해 최대값인 $3를 추적하는 데 사용되고, 다른 하나는 관련 입력 행을 기록하는 데 사용됩니다.
모든 입력을 읽고 처리한 후 id 순서대로 라인을 인쇄합니다.
이 NR==1 {print; next};
줄은 첫 번째 줄(헤더 줄)을 그대로 인쇄한 후 다음 입력 줄로 점프합니다.