Linux 명령을 사용하여 두 개의 열을 기반으로 데이터 필터링

Linux 명령을 사용하여 두 개의 열을 기반으로 데이터 필터링

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

관련 정보