중복 데이터를 건너뛰기 위해 두 파일을 병합하는 방법

중복 데이터를 건너뛰기 위해 두 파일을 병합하는 방법

두 개의 서로 다른 대용량 파일(각각 300,000줄 이상)이 있고 이를 특정 방식으로 결합하고 싶습니다. 두 데이터의 일부 행은 동일한 것을 측정합니다. 열 9, 14, 15, 16, 17이 서로 같을 때 동일한 것을 측정하고 있다고 생각하며 file1에서 출력하고 file2 행을 건너뛰고 싶습니다. 중복된 데이터를 건너뜁니다. 그렇지 않으면 두 파일의 모든 줄을 출력하고 싶습니다. 중복 행의 다른 열은 동일하지 않을 수 있으며 파일 1의 정밀도가 파일 2의 정밀도보다 우수하므로 파일 2 대신 파일 1에서 행이 선택됩니다.

예를 들어 다음 두 파일의 처음 세 행에는 9, 14, 15, 16, 17 열이 서로 동일하므로 두 데이터 세트의 처음 세 행은 동일한 것을 측정하므로 File에서 1을 출력하려고 합니다. File2 데이터를 건너뜁니다. 데이터 세트의 네 번째 행의 경우 두 파일의 14번째 열이 동일하지 않기 때문입니다. 두 파일에서 두 줄을 출력했습니다.

이 스크립트를 사용했습니다

awk '!seen[$9,$14,$15,$16,$17]++' File1 File2 > output  

, 이는 작은 데이터에 적합합니다. 그러나 대규모 데이터 세트에 사용할 때 일부 중복되지 않은 데이터를 건너뛰는데 그 이유를 모르겠습니다. 데이터 세트를 병합하는 데 사용할 스크립트에 대해 누군가 도움을 줄 수 있다면 감사하겠습니다.

파일 1

28  208   48  198  1110   2.04   33 0.0   34.40 3.3 0.0 0   8.0 1985  1  1 SMO1   -9 -9 -9  
24  102   26   99  2100   2.61  129 0.0   42.90 3.3 0.0 0   8.0 1985  1  1 EYA    -9 -9 -9  
89  294   26  106  1162   4.54 -115 0.0   70.80 3.3 0.0 0   8.0 1985  1  1 GYA    -9 -9 -9  
38   88   41   86  1100   3.50  155 0.0   56.30 3.8 0.0 0  10.0 1985  1  1 KOL1   -9 -9 -9  

파일 2

24  102   22  100  1110   2.04   33 0.0   34.40 3.3 0.0 0   8.0 1985  1  1 SMO1   -9 -9 -9  
24  102   26   99  2100   2.61  129 0.0   42.90 3.3 0.0 0   8.0 1985  1  1 EYA    -9 -9 -9  
24  102   26  106  1162   4.54 -115 0.0   70.80 3.3 0.0 0   8.0 1985  1  1 GYA    -9 -9 -9  
38   88   41   86  1100   3.50  155 0.0   56.30 3.8 0.0 0  10.0 2000  1  1 KOL1   -9 -9 -9  

산출

28  208   48  198  1110   2.04   33 0.0   34.40 3.3 0.0 0   8.0 1985  1  1 SMO1   -9 -9 -9  
24  102   26   99  2100   2.61  129 0.0   42.90 3.3 0.0 0   8.0 1985  1  1 EYA    -9 -9 -9  
89  294   26  106  1162   4.54 -115 0.0   70.80 3.3 0.0 0   8.0 1985  1  1 GYA    -9 -9 -9  
38   88   41   86  1100   3.50  155 0.0   56.30 3.8 0.0 0  10.0 1985  1  1 KOL1   -9 -9 -9  
38   88   41   86  1100   3.50  155 0.0   56.30 3.8 0.0 0  10.0 2000  1  1 KOL1   -9 -9 -9  

관련 정보