파일에서 열을 읽고 기존 csv 파일에 열을 씁니다.

파일에서 열을 읽고 기존 csv 파일에 열을 씁니다.

기본적으로 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"

관련 정보