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