awk / sedで記述する代わりに、bashを介して「sort」と「join」を組み合わせて使用することができ、さらに高速になる可能性があります。
key.cvs(id、name)
1,homer
2,marge
3,bart
4,lisa
5,maggie
data.cvs(名前、動物、所有者、年齢)
snowball,dog,3,1
frosty,yeti,1,245
cujo,dog,5,4
ここで、最初に両方のファイルをユーザーID列で並べ替える必要があります。
cat key.cvs | sort -t, -k1,1 > sorted_keys.cvs
cat data.cvs | sort -t, -k3,3 > sorted_data.cvs
次に、2つのファイルを結合します。
join -1 1 -2 3 -o "2.1 2.2 1.2 2.4" -t , sorted_keys.cvs sorted_data.cvs > replaced_data.cvs
これにより、次のようになります。
snowball,dog,bart,1
frosty,yeti,homer,245
cujo,dog,maggie,4
これ:
-o "2.1 2.2 1.2 2.4"
最終出力に必要な2つのファイルの列を示しています。
他のスクリプト言語と比較して、データの複数のギグを見つけて置き換えるのはかなり高速です。私はSED/AWKと直接比較していませんが、SED / AWKで書くよりも、これをラップするbashスクリプトを書く方がはるかに簡単です(少なくとも私にとっては)。
また、gnu coreutilsのアップグレードバージョンを使用して並べ替えを高速化できるため、並べ替えを並行して実行できます
cat data.cvs | sort --parallel=4 -t, -k3,3 > sorted_data.cvs
4は、実行するスレッドの数です。通常、マシンコアごとに2つのスレッドがマシンを最大化することをお勧めしますが、これ専用の場合は問題ありません。