複数のCSVファイルをマージして、一致する列と一致しない列を取得します。

複数のCSVファイルをマージして、一致する列と一致しない列を取得します。

ファイル1

abram,john,steve,mark,daniel,stokes
19,567,44,0,77,9

ファイル2

john,mark,skates
999,1,1

ファイル3

abram,stokes
55,66

ファイル4

abram,daniel,john,mark,skates,steve,stokes,yasmin
0,0,0,0,0,0,0,0

私が必要とする結果は -

マージ.csv

        abram  daniel  john  mark  skates  steve  stokes  yasmin
File1     19     77      567    0     0       44      9        0

File2      0      0      999    1     1        0      0        0

File3     55      0        0    0     0        0     66        0

File4      0      0        0    0     0        0      0        0

答え1

ミラーの使用(https://github.com/johnkerl/miller)、入力CSVファイルのみを含むフォルダから始めて

mlr --c2p put '$filename=FILENAME' then unsparsify --fill-with "0" then reorder -f filename *

あなたは得るでしょう

filename abram john steve mark daniel stokes skates yasmin
File1    19    567  44    0    77     9      0      0
File2    0     999  0     1    0      0      1      0
File3    55    0    0     0    0      66     0      0
File4    0     0    0     0    0      0      0      0

見やすく印刷されたテーブルの代わりにCSV出力を取得するには、オプションを--c2pに変更します--csv

答え2

見苦しいですが、ファイルを適切な列形式に変更してファイル名を列に入れることができる場合は、GNU datamashでクロス分析できます。

for f in File{1..4}; do rs -c, -T < "$f" | awk -vf="$f" '{print f, $0}'; done | 
  datamash -Ws --filler='0' crosstab 1,2 unique 3
       abram  daniel  john  mark  skates  steve  stokes  yasmin
File1  19      77    567   0       0      44      9       0
File2  0       0     999   1       1      0       0       0
File3  55      0     0     0       0      0       66      0
File4  0       0     0     0       0      0       0       0

関連情報