약 100,000개의 파일이 있으며 각 파일에는 다음과 같은 고유한 줄이 있습니다.
파일 1.txt
chr1_1_200
chr1_600_800
...
파일 2.txt
chr1_600_800
chr1_1000_1200
...
파일 3.txt
chr1_200_400
chr1_600_800
chr1_1000_1200
...
각 파일에는 명령을 실행할 때 약 3천만 줄이 있습니다.
cat *txt | sort -u > Unique_Position.txt
시스템에 메모리가 부족합니다. Linux에서 일반 명령줄을 사용하여 이 문제를 처리하는 방법은 무엇입니까?
답변1
파일이 이미 허용 가능한 방식으로 정렬되어 있는 경우 병합 정렬을 한 다음 uniq
정렬할 수 있습니다.
sort -t_ -k2,2n -k3,3n -m -- *.txt | uniq > Unique_Position.txt
...두 번째 필드(밑줄로 구분 _
)에서 숫자로 정렬하고, 키가 고유한 경우 세 번째 필드를 기준으로 정렬합니다. 그런 다음 결과 출력이 파이프되어 uniq
출력 파일로 리디렉션됩니다.
위의 (짧은) 예제 입력을 고려하면 결과는 다음과 같습니다.
chr1_1_200
chr1_200_400
chr1_600_800
chr1_1000_1200
유지하려는 행의 정렬 필드를 완전히 지정할 수 있는 경우 다음 옵션을 sort
추가하여 모든 작업을 수행할 수 있습니다.-u
sort -t_ -k1 -k2,2n -k3,3n -m -u *.txt > Unique_Position.txt
이렇게 하면 호출 없이 나열된 세 필드 사이에 고유한 행이 유지됩니다 uniq
(옵션이 추가되었습니다 -u
). 이러한 정렬 필드는 입력 파일이 정렬되는 방식과 일치해야 합니다.