여러 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

관련 정보