たとえば、0.csv という 2 つの csv ファイルがあります。
100a,a,b,c,c
200a,b,c,c,c
300a,c,d,c,c
および 1.csv
100a,Emma,Thomas
200a,Alex,Jason
400a,Sanjay,Gupta
500a,Nisha,Singh
出力を次のようにしたい
100a,a,b,c,c,Emma,Thomas
200a,b,c,c,c,Alex,Jason
300a,c,d,c,c,0,0
400a,0,0,0,0,Sanjay,Gupta
500a,0,0,0,0,Nisha,Singh
Unix シェルスクリプトまたは Perl でこれを行うにはどうすればよいですか? 私は UNIX の「結合」コマンドを知っていますが、それは小さなファイルでうまく機能します。たとえば、結果を取得するには、次のことができます
join -t , -a 1 -a 2 -1 1 -2 1 -o 0 1.2 1.3 1.4 1.5 2.2 2.3 -e "0" 0.csv 1.csv
しかし、実際のデータ ファイルには 100 万を超える列 (ギガバイト単位の合計データ サイズ) があり、UNIX コマンドも 100 万文字を超える長さになるため、これは私の目的には適していません。非効率的なコードはすぐに行き詰まるため、これが最も重要な頭痛の種になる可能性があります。
また、欠落しているデータがある場合は常にプレースホルダー文字「0」が必要であることにも注意してください。これにより、これを単純に使用できなくなります
join -t , -a 1 -a 2 -1 1 -2 1 0.csv 1.csv
初心者の Perl プログラマーでもあるので、詳細を歓迎します。私は解決策がperlまたはシェルスクリプトであることを望んでいますが、実際に機能するものは何でも問題ありません.