重複データをスキップするために2つのファイルをマージする方法

重複データをスキップするために2つのファイルをマージする方法

2つの異なる大容量ファイル(それぞれ300,000行以上)があり、それらを特定の方法で結合したいと思います。両方のデータの一部の行は同じものを測定します。列9、14、15、16、17が互いに等しいときに同じものを測定していると思い、file1から出力してfile2行をスキップしたいと思います。重複したデータをスキップします。それ以外の場合は、両方のファイルのすべての行を出力したいと思います。重複行の他の列は同じではなく、ファイル 1 の精度がファイル 2 の精度より優れているため、ファイル 2 の代わりにファイル 1 から行が選択されます。

たとえば、次の 2 つのファイルの最初の 3 行には、9、14、15、16、17 の列が同じであるため、2 つのデータセットの最初の 3 行は同じものを測定するため、File から 1 を出力したいとします。 File2データをスキップします。これは、データセットの4行目の場合、2つのファイルの14列目が同じではないためです。両方のファイルから2行を出力しました。

このスクリプトを使用しました

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  

ベストアンサー1

おすすめ記事