기본적으로 cols.csv라는 여러 열이 있는 csv 파일이 있습니다.
1,a,100
2,b,200
3,c,300
4,e,400
col.csv라는 열이 있는 새 csv 파일이 있습니다.
f
g
h
i
col.csv의 항목을 복사하여 cols.csv의 각 행 끝에 추가하여 이제 cols.csv에 이러한 항목이 포함되도록 하고 싶습니다.
1,a,100,f
2,b,200,g
3,c,300,h
4,e,400,i
가능합니까? 가입, 붙여넣기를 시도했지만 아무 효과가 없었습니다.
답변1
콘텐츠test1.txt
1,a,100
2,b,200
3,c,300
4,e,400
콘텐츠test2.txt
f
g
h
i
견본.
$ paste -d, test1.txt test2.txt
1,a,100,f
2,b,200,g
3,c,300,h
4,e,400,i
설명하다
이 -d
플래그를 사용하여 구분 기호를 다음과 같이 설정합니다.
답변2
-d
구분 기호를 쉼표로 설정하려면 붙여넣기 플래그를 사용하세요 .
paste -d, cols.csv col.csv
답변3
paste
줄 바꿈이 포함된 인용 필드가 포함될 수 있는 CSV 입력을 처리한다고 가정하면 줄 기반 도구(예: 두 파일 결합) 를 사용할 수 없습니다 . 그렇게 하면 잘못된 출력이 생성됩니다.
다음 예에서는 각각 세 개의 레코드를 포함하는 두 개의 파일을 사용합니다. 여기서 첫 번째 파일의 두 번째 필드에는 각 레코드에 새 줄이 포함되어 있습니다.
file1
:
Field 1,Field 2
YYYYMMDD-XXXX,"10 Somestreet
NNNNNN Somecity"
YYYYMMDD-YYYY,"20 Otherstreet
MMMMMM Somecity"
YYYYMMDD-ZZZZ,"25 Bumble Rd
KKKKKK Village"
file2
:
Field 3
"1,a"
"1,b"
"2,c"
여기를 사용하면 paste
분명히 올바른 일을 할 수 없을 것입니다.
$ paste -d , file1 file2
Field 1,Field 2,Field 3
YYYYMMDD-XXXX,"10 Somestreet,"1,a"
NNNNNN Somecity","1,b"
YYYYMMDD-YYYY,"20 Otherstreet,"2,c"
MMMMMM Somecity",
YYYYMMDD-ZZZZ,"25 Bumble Rd,
KKKKKK Village",
대신 CSV라는 도구를 사용합니다.밀러( mlr
)는 필드라고 하는 레코드 번호를 두 파일의 각 레코드에 추가합니다 . Miller 옵션을 nr
사용하여 -I
파일 "제자리"에 필드를 추가합니다 .
$ mlr --csv -I put '$nr=FNR' file1 file2
그런 다음 이 번호를 사용하여 파일을 결합합니다.
$ mlr --csv join -f file1 -j nr file2
nr,Field 1,Field 2,Field 3
1,YYYYMMDD-XXXX,"10 Somestreet
NNNNNN Somecity","1,a"
2,YYYYMMDD-YYYY,"20 Otherstreet
MMMMMM Somecity","1,b"
3,YYYYMMDD-ZZZZ,"25 Bumble Rd
KKKKKK Village","2,c"
작업을 통해 더 이상 유용하지 않은 경우 cut
필드를 제거할 수 있습니다 .nr
$ mlr --csv join -f file1 -j nr then cut -x -f nr file2
Field 1,Field 2,Field 3
YYYYMMDD-XXXX,"10 Somestreet
NNNNNN Somecity","1,a"
YYYYMMDD-YYYY,"20 Otherstreet
MMMMMM Somecity","1,b"
YYYYMMDD-ZZZZ,"25 Bumble Rd
KKKKKK Village","2,c"