이제 3개의 .csv 파일이 있는데 그 중 하나에는 행이 1개만 있습니다.
파일 1.csv
dog
cats
mouse
파일 2.csv
001a
002a
003c
파일 3.csv
WORD
출력은 다음과 같아야합니다.
dog,001a,WORD
cats,002a,WORD
mouse,003c,WORD
솔루션 (이전 질문에서) 예:
paste -d, file1.csv file2.csv | awk -F, '{print $1 "," $2 ",WORD"}'
하지만 "WORD"는 여기에만 쓰여지고 file3.csv에서는 읽혀지지 않습니다.
paste
file3.csv에 각 행을 채우도록 지시하는 방법이 있나요 ? 아니면 file3.csv를 변수로 저장하고 할당할까요 awk
?
답변1
또 다른 간단한 방법은 다음과 같습니다.
$ paste -d, file1 file2 file3 | awk 'BEGIN{FS=OFS=","} {if(NR==1){w=$3} else {$3=w}}1'
dog,001a,WORD
cats,002a,WORD
mouse,003c,WORD
답변2
$ paste -d, file1.csv file2.csv |
awk -v OFS=',' 'NR==FNR{w=$0; next} {print $0, w}' file3.csv -
dog,001a,WORD
cats,002a,WORD
mouse,003c,WORD
답변3
fill-down
하위 명령 사용밀러( mlr
) 파일 길이에 관계없이 모든 빈 필드를 이전 레코드의 해당 필드 값으로 채울 수 있습니다.
각 파일의 데이터가 헤드리스 CSV라고 가정하고 다음 명령은 각 레코드의 세 필드 모두에 대해 채우기 작업을 수행합니다.
paste -d, file1 file2 file3 | mlr -N --csv fill-down -f 1,2,3
예제 실행(더 짧은 두 번째 파일을 사용하고 있음에 유의하세요):
$ cat file1
dog
cats
mouse
$ cat file2
001a
002a
$ cat file3
WORD
$ paste -d, file1 file2 file3
dog,001a,WORD
cats,002a,
mouse,,
$ paste -d, file1 file2 file3 | mlr -N --csv fill-down -f 1,2,3
dog,001a,WORD
cats,002a,WORD
mouse,002a,WORD
paste
Miller에 대한 TSV 데이터 세트를 생성한 다음(기본값이 아닌 구분 기호를 설정하지 않음) --t2c
TSV를 CSV로 변환하는 옵션을 활용하는 변형 입니다( --itsv
두 옵션 및 의 조합에 대한 바로가기 --ocsv
).
paste file1 file2 file3 | mlr -N --t2c fill-down -f 1,2,3