파일 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