22개의 열이 있는 *.psl 파일이 있습니다. 10열과 22열을 기준으로 모든 행을 추출하고 싶습니다. 따라서 일부 행에는 열 10에 여러 개의 공통 읽기가 있고 열 22에 더 높은 점수를 가진 특정 읽기에 대한 점수가 있으므로 해당 행을 인쇄한 다음 새 출력에서 파일에서 나머지 읽기를 제거하면 됩니다.
98 1 0 0 0 0 0 0 + 7efcc799-5806-477b-8145-fb13d90fcdb4 466 151 250 hsa_circ_0005880 100 0 99 1 99, 151, 0, 99
98 1 0 0 0 0 0 0 + 7efcc799-5806-477b-8145-fb13d90fcdb4 466 151 250 hsa_circ_0005724 100 0 99 1 99, 151, 0, 99
98 1 0 0 0 0 0 0 + 7efcc799-5806-477b-8145-fb13d90fcdb4 466 151 250 hsa_circ_0005173 100 0 99 1 99, 151, 0, 99
97 1 0 0 0 0 0 0 + 7efcc799-5806-477b-8145-fb13d90fcdb4 466 152 250 hsa_circ_0004932 100 0 98 1 98, 152, 0, 98
94 0 0 0 1 3 2 6 + 4c415d86-0c12-4b07-ab19-0d7fcbe8b1c7 334 220 317 hsa_circ_0001006 100 0 100 3 18,25,51, 220,238,266, 0,19,49, 94
83 3 0 0 2 5 3 10 + a28de8d0-e08b-43b5-9de2-07df4404ea8c 332 35 126 hsa_circ_0037060 100 4 100 5 7,18,43,3,15, 35,43,65,108,111, 4,11,36,81,85, 86
71 3 0 0 0 0 1 1 - 2116d815-5edb-4124-998b-398be6161c56 490 184 258 hsa_circ_0001592 100 1 76 2 34,40, 232,266, 1,36, 74
그래서 저는 이와 같은 출력을 원합니다. 여기서는 다른 유사한 읽기 점수보다 점수가 낮은 내 파일에서 행이 삭제되었음을 확인할 수 있습니다.
98 1 0 0 0 0 0 0 + 7efcc799-5806-477b-8145-fb13d90fcdb4 466 151 250 hsa_circ_0005880 100 0 99 1 99, 151, 0, 99
98 1 0 0 0 0 0 0 + 7efcc799-5806-477b-8145-fb13d90fcdb4 466 151 250 hsa_circ_0005724 100 0 99 1 99, 151, 0, 99
98 1 0 0 0 0 0 0 + 7efcc799-5806-477b-8145-fb13d90fcdb4 466 151 250 hsa_circ_0005173 100 0 99 1 99, 151, 0, 99
94 0 0 0 1 3 2 6 + 4c415d86-0c12-4b07-ab19-0d7fcbe8b1c7 334 220 317 hsa_circ_0001006 100 0 100 3 18,25,51, 220,238,266, 0,19,49, 94
83 3 0 0 2 5 3 10 + a28de8d0-e08b-43b5-9de2-07df4404ea8c 332 35 126 hsa_circ_0037060 100 4 100 5 7,18,43,3,15, 35,43,65,108,111, 4,11,36,81,85, 86
71 3 0 0 0 0 1 1 - 2116d815-5edb-4124-998b-398be6161c56 490 184 258 hsa_circ_0001592 100 1 76 2 34,40, 232,266, 1,36, 74
검색했지만 비슷한 질문을 찾지 못했습니다. 그럼 이 문제를 해결하는 방법을 알려주세요. 귀하의 조언에 미리 감사드립니다.
답변1
awk
입력 파일 사용 및 처리두 배, 한 번은 동일한 열에 대해 가장 높은 값인 10을 찾고, 두 번째는 우리가 찾은 가장 높은 값을 가진 레코드를 인쇄합니다.
awk 'NR==FNR{ max[$10]=(max[$10]>$NF? max[$10]:$NF); next }
max[$10]==$NF' infile infile