머리글을 병합하지 않고 여러 CSV 파일 병합


21

cat명령을 사용하여 여러 .CSV 파일을 병합해야 하지만 각 파일의 헤더를 복사하지 않아도됩니다.

이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

답변:


32

여기에cat 설명 된대로 명령 이상이 필요 합니다 .

3 개의 CSV 파일 ( file1.csv, file2.csv)이 있고 파일 file3.csv에 합류하고 bigfile.csv헤더를 항상 첫 번째 줄 (만)로 지정한 다음

또는 (첫 번째 파일 "file1.csv"의 헤더 유지) :

cat file1.csv <(tail +2 file2.csv) <(tail +2 file3.csv) > bigfile.csv

또는 (이름이 "file"로 시작하는 모든 파일에서 헤더를 제거하십시오) :

awk 'FNR > 1' file*.csv > bigfile.csv

4
나는 이것이 일반적인 리눅스 답변을 찾고 있음을 발견했지만 내 경우에는 정확하게 작동하지 않았다. file1.csv를 자동으로 무시합니다. 나는 그 파일을 고양이로 만들어야했다. cat <(cat file1.csv) <(tail +2 file2.csv) <(tail +2 file3.csv) > bigfile.csv
Lelon

cat <file1.csv <(tail +2 file2.csv) <(tail +2 file3.csv)> bigfile.csv 방법

@ user64636 꼬리와 +2 사이에 공백 문자가 있어야합니다
nohillside

실제로 내가 사용했다 tail -n+2, tail +2작동하지 않을 것입니다
마티유 나폴리에게

12

나는 최고 답변에 동의하지만 다음 시나리오로 확장 할 것을 제안합니다 (댓글을 달 수 없습니다).

출력 파일에 헤더 (한 번)를 포함 시키려면 올바른 스크립트는 다음과 같습니다.

awk '(NR == 1) || (FNR > 1)' file*.csv > bigfile.csv

FNR은 단일 파일에서 처리 된 레코드 수를 나타냅니다. 그리고 NR은이를 전 세계적으로 나타내므로 첫 번째 라인이 허용되고 나머지는 이전과 같이 무시됩니다.


7

{ ; }프로세스 대체 ( <()) 대신 그룹 명령 ( )을 사용할 수도 있습니다 .

{ head -n1 file1.csv; for f in file*.csv; do tail -n+2 "$f"; done; } > new.csv

또한 파일이 빈 줄 ( \r\n) 로 끝나는 한 CRLF 줄 끝에서 작동합니다 .

POSIX 1003.1-2001은 헤드 및 테일의 숫자 전용 버전을 더 이상 사용하지 않으며 일부 환경에서는 경고를 표시합니다.


2

청크 스크립트를 위해 동일한 열을 가진 두 개의 큰 CSV를 더 큰 CSV로 연결해야합니다 (데이터에 고유 ID가 없음).

먼저 두 번째 CSV에서 헤더를 가져 왔습니다.

awk 'FNR > 1' file2.csv > file2_noheading.csv

다음으로 다음을 통해 연결

cat file1.csv file2_noheading.csv > newfile.csv

1

위의 명령 순서를 사용하면 다음과 같은 파일이 생성되었습니다.

header,of,csv1
contents,of,csv1
==> csv2.csv

contents,of,csv2

하나의 헤더 행과 모든 관련 값을 사용하여 올바른 CSV로 만들기 위해 다음과 같은 sed주문을 사용했습니다 ...sed -ie "/^$/d;/^==>/d" bigfile.csv


0

많은 파일이있는 경우 더 쉬운 솔루션 :

awk 'FNR > 1' *.csv > merged.csv

큰 파일을 편집하기 위해 돌아가서 헤더를 다시 추가하십시오.


귀하의 답변은 2013 년 iolsmit이 제시 한 모든 것과 어떻게 다릅니 awk 'FNR > 1' file*.csv > bigfile.csv까? 아니에요!
user3439894

다시 : 그것은 어떻게 다른가요? 그것은 더 간결한 대답 나는 적어도, 복사 및 붙여 넣기하는 하나입니다) 내 upvote에 가져옵니다
릭 데이비스

이것은 모든 파일이 필요하지 않기 때문에 좋은 대답입니다.file
big_smile
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.