シェルスクリプトbashには、キーと値を含む約1.2 GBのデータの2つの大きなファイルがあります。キーに基づいて2つのファイルを比較し、値の違いを3番目のファイルに保存する必要があります。ファイル2は常にファイル1セットの子になります。 、ファイル2に存在しない値(キーの場合)とファイル1にある一意の値を見つけるだけです。
ファイル1:
test1 marco;polo;angus
test2 mike;zen;liza
test3 tom;harry;alan
test4 bob;june;janet
1332239_44557576_CONTI Lased & Micro kjd $353.50_30062020_lsdf3_no-rule 343323H;343434311H;454656556H;343343432H
1332240_44557576_CONTI Mazed & Micro kjd $353.50_30062020_lsdf3_some-rule 232324L;2226556H;343223432H
ファイル2:
test1 polo;angus
test2 mike
test4 bob;janet
1332240_44557576_CONTI Mazed & Micro kjd $353.50_30062020_lsdf3_some-rule 232324L;343223432H
file1とfile2の最初の2つの列を比較し(最初の2つの列でfile2の内容全体を検索して)、一致する場合は値の違いを印刷したいと思います。次に、ファイル1の2行目を検索します。ファイル1の一意のキーも印刷する必要があります。
予想出力:
test1 marco
test2 zen;liza
test3 tom;harry;alan
test4 june
1332239_44557576_CONTI Lased & Micro kjd $353.50_30062020_lsdf3_no-rule 343323H;343434311H;454656556H;343343432H
1332240_44557576_CONTI Mazed & Micro kjd $353.50_30062020_lsdf3_some-rule 2226556H
私のファイルは約100,000行を含む大容量なので、実行速度を速くしたいと思います。これは bash シェルスクリプトを使用するシェルスクリプトで実行されます。これらのファイルはキー()を持つテキストファイルfile1
です。値は次のとおりです()。file2
1332239_44557576_CONTI Lased & Micro kjd $353.50_30062020_lsdf3_no-rule
343323H;343434311H;454656556H;343343432H
答え1
シェルスクリプトを使用する場合は、まずファイルを 1 行に 1 つのキーと 1 つの値で正規化します。その後、ソートされた場合、コマンドはcomm
一方の側で行を抽出できますが、もう一方の側では行を抽出できません。次に、(必要に応じて)ファイルを再度正規化します。
より良いオプションは、2つの入力ファイルを1行ずつ読み、違いを出力するより高いレベルの言語(おそらくPerl5を使用する)で小さなプログラムを構築することです。繰り返しますが、多くのメモリを使用する予定がない場合は、入力をソートしたいと思います。
おそらく、この形式を処理するように設計されたプログラムがすでに存在するでしょう。ソフトウェアの入力機能を使用するのは良い開始点です。