両方のファイルの列を結合して別々の出力ファイルに分割します。

両方のファイルの列を結合して別々の出力ファイルに分割します。

次のように、同じ最初の列と最初の行(ヘッダー)を共有する2つの大きなcsvファイルがあります。 etc は、同じパターンを持つより多くの値を意味します。

ファイル1.csv

names,text1,text2,text3,etc
A,1,4,3 ...
B,5,2,8 ...
C,3,7,4 ...
D,9,1,3 ...
etc

ファイル2.csv

names,text1,test2,text3,etc
A,7,2,9 ...
B,3,0,6 ...
C,8,7,2 ...
D,1,5,6 ...
etc

file1.csvとfile2.csvの列(一致するヘッダーまたは列番号を含む)とfile1.csvの最初の列を組み合わせて、ヘッダーの中間に基づいて名前付きの新しいファイルに出力するコード/スクリプトが必要です。

したがって、以下の出力ファイルなどが提供されます。

テキスト1.csv

names,text1,text1
A,1,7
B,5,3
C,3,8
D,9,1
etc

テキスト2.csv

names,text2,text2
A,4,2
B,2,0
C,7,7
D,1,5
etc

テキスト3.csv

names,text3,text3
A,3,9
B,8,6
C,4,2
D,3,6
etc

ベストアンサー1

例に従って、両方のファイルがソートされていると仮定すると(ヘッダー行を除く)、次のことが機能します。

column=2
until [[ $column > $(awk -F, '{ print NF; exit }' file1.csv) ]] ; do 
  join -t , -o 1.1,1.$column,2.$column file1.csv file2.csv > $(awk -F, '{ print $'$column'; exit }' file1.csv).csv 
  ((column++))
done

(彫刻を借りました。@ヤノス存在するこの返信.)

ここで、ほとんどの魔法はjoin次のように実行されます。出力ファイルは現在のディレクトリに書き込まれます。

おすすめ記事