![연속적으로 번호가 매겨진 각 하위 그룹/군에 대해 텍스트 파일에서 주어진 열의 가장 높은 값을 포함하는 단일 행을 추출합니다.](https://linux55.com/image/145592/%EC%97%B0%EC%86%8D%EC%A0%81%EC%9C%BC%EB%A1%9C%20%EB%B2%88%ED%98%B8%EA%B0%80%20%EB%A7%A4%EA%B2%A8%EC%A7%84%20%EA%B0%81%20%ED%95%98%EC%9C%84%20%EA%B7%B8%EB%A3%B9%2F%EA%B5%B0%EC%97%90%20%EB%8C%80%ED%95%B4%20%ED%85%8D%EC%8A%A4%ED%8A%B8%20%ED%8C%8C%EC%9D%BC%EC%97%90%EC%84%9C%20%EC%A3%BC%EC%96%B4%EC%A7%84%20%EC%97%B4%EC%9D%98%20%EA%B0%80%EC%9E%A5%20%EB%86%92%EC%9D%80%20%EA%B0%92%EC%9D%84%20%ED%8F%AC%ED%95%A8%ED%95%98%EB%8A%94%20%EB%8B%A8%EC%9D%BC%20%ED%96%89%EC%9D%84%20%EC%B6%94%EC%B6%9C%ED%95%A9%EB%8B%88%EB%8B%A4..png)
내 텍스트 파일에서 열 2의 연속 번호가 지정된 각 가족(예: family_1, family_2 등)에서 열 3에 있는 가장 높은 값이 포함된 행을 가져와 이 데이터를 새 텍스트 파일에 입력하려고 합니다.
입력 데이터:
TTGSCA family_1 18.123083 681 36349 1
TTGSCA family_1 18.123083 681 36349 1
CTTRAG family_2 17.844843 685 37001 1
CTYAAG family_2 16.95983 657 36170 1
.GCCAAR family_3 19.436863 698 35844 1
WGCCAA. family_3 19.99668 747 38506 1
.GCCAAS family_3 17.037859 599 31922 1
WGCCAA. family_3 19.99668 747 38506 1
CCACTK family_4 17.200712 776 44550 1
CCACTY family_4 18.86465 727 38616 1
MCACTT family_4 18.0871 737 40399 1
MCACTT family_4 18.0871 737 40399 1
YCACTT family_4 19.369513 804 43376 -1
CCAYTT family_4 16.193245 752 44296 1
CCAYTT family_4 16.193245 752 44296 1
SCACTT family_4 19.759317 687 34686 1
출력 데이터:
TTGSCA family_1 18.123083 681 36349 1
CTTRAG family_2 17.844843 685 37001 1
WGCCAA. family_3 19.99668 747 38506 1
SCACTT family_4 19.759317 687 34686 1
grep을 사용해야 할지 awk를 사용해야 할지, 그리고 이들을 하나의 기능으로 결합하는 방법을 잘 모르겠습니다.
답변1
그리고GNU 데이터 혼합(그리고 의 약간의 도움 cut
):
$ datamash -Wf groupby 2 max 3 < file.txt | cut -f1-6
TTGSCA family_1 18.123083 681 36349 1
CTTRAG family_2 17.844843 685 37001 1
WGCCAA. family_3 19.99668 747 38506 1
SCACTT family_4 19.759317 687 34686 1
답변2
datamash
나는 이것이 아마도 최고의 도구라고 생각 하지만 여기에 독특한 대안이 있습니다.
<infile sort -k2,2V -k3,3n | awk 'NR==1 || $2!=p; { p=$2 }'
답변3
이전 답변보다 원하는 출력을 얻는 더 깔끔한 방법이 있습니다. 두 번 사용해야 하지만 , 및 를 네 번 사용하는 것보다 훨씬 낫습니다 sort
.sort
grep
tail
sort -k3r numbers | awk '!seen[$2]++' | sort -k2
산출:
TTGSCA family_1 18.123083 681 36349 1
CTTRAG family_2 17.844843 685 37001 1
WGCCAA. family_3 19.99668 747 38506 1
SCACTT family_4 19.759317 687 34686 1