ファイル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