두 개의 서로 다른 대용량 파일(각각 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