![如何合并两个文件以跳过重复数据](https://linux22.com/image/160982/%E5%A6%82%E4%BD%95%E5%90%88%E5%B9%B6%E4%B8%A4%E4%B8%AA%E6%96%87%E4%BB%B6%E4%BB%A5%E8%B7%B3%E8%BF%87%E9%87%8D%E5%A4%8D%E6%95%B0%E6%8D%AE.png)
我有两个不同的大文件(每个文件超过 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