여러 csv 파일을 하나의 큰 파일로 병합하려고 합니다. 이러한 파일은 모두 열 길이가 다르며 나머지 파일에는 헤더만 있습니다(데이터 없음). 최종 csv를 사용하면
paste -d "," file1.csv file2.csv file3.csv file4.csv file5.csv file6.csv > output.csv
다음과 같습니다.
cgi_si2의 데이터는 cgi_sii에 있어야 하고 cgi_sii의 데이터는 다른 열에 있어야 합니다. file1.csv의 범위는 subjectkey에서 cgi_si까지이고, file2.csv는 단지 cgi_si2이지만 헤더( cat file2.csv cgi_si2
)만 있고, file3.csv에는 cgi_sii와 데이터 번호(단 하나의 열만 있음)가 있으며, file4.csv에는 다른 모든 헤더가 있지만 데이터는 없으며, file5 .csv가 있습니다. 헤더와 데이터(열 1개)인 반면, file6.csv는 헤더가 많고 데이터가 없습니다( cat file6.csv cgi_efficacy_se,trt_grp,days_baseline,etc....
).
나는 | sed 's/^,//; s/,$//'> output.csv
성공하지 못한 채 배관을 시도했습니다. 어떤 조언이라도 대단히 감사하겠습니다. 감사해요!
답변1
여기에 예가 있습니다. 이러한 유형의 입력 파일이 있습니다. 제목이 다르며 내용이 없는 파일도 있습니다.
cat input_01.csv
subjectjey,cgi_si
a,2
b,3
cat input_02.csv
cgi_si2,cgi_sii
4,10
9,18
cat input_03.csv
cgi_si2
cat input_04.csv
cgi_sii
8
9
훌륭하게 사용하다밀러그리고 달리는 중
mlr --csv rename -r '"cgi_si[0-9]+",cgi_si' then rename '"cgi_sii.+",cgi_sii' then unsparsify input_0*.csv
당신은 할 것
+------------+--------+---------+
| subjectjey | cgi_si | cgi_sii |
+------------+--------+---------+
| a | 2 | |
| b | 3 | |
| | 4 | 10 |
| | 9 | 18 |
| | | 8 |
| | | 9 |
+------------+--------+---------+
이름 바꾸기 및 정규식을 사용하여 일부 필드의 이름을 바꾼 다음 모든 필드를 병합했습니다.
답변2
작업을 완료하는 가장 쉬운 방법은 수동으로 완료하는 것입니다. Excel/Calc를 열고 Excel(또는 텍스트 편집기)에서 각 .csv를 하나씩 열고 한 파일에서 다른 파일로 복사하여 붙여넣습니다.
이를 자동화하려면 포괄적인 프로그래밍을 수행해야 합니다.