如何合并两个文件以跳过重复数据

如何合并两个文件以跳过重复数据

我有两个不同的大文件(每个文件超过 300,000 行),我想以一种特定的方式组合它们。两个数据的某些行测量的是相同的东西;当第 9、14、15、16、17 列相互相等时,我想它们正在测量相同的东西,并且我想从 file1 输出并跳过 file2 行以跳过重复数据。否则,我想输出两个文件中的所有行。重复行中的其他列可能不相等,并且文件 1 的精度优于文件 2,这就是从文件 1 而不是文件 2 选择行的原因。

例如,由于以下两个文件的前三行的第 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  

相关内容