.csv 파일의 첫 번째 행을 새 .csv 파일로 추출합니다.

.csv 파일의 첫 번째 행을 새 .csv 파일로 추출합니다.

Debian Squeeze의 한 폴더에 1000개 이상의 .csv 파일이 있습니다. 1000개의 .csv 파일 각각의 첫 번째 행만 포함하는 새 .csv 파일을 만들려고 합니다.

나는 시도했다:

read -r firstline < sourcefile_1.csv > headers.csv

하지만 이렇게 하면 빈 파일만 생성됩니다. (작동하더라도 파일의 첫 번째 줄만 복사합니다.)

폴더에 있는 1000개 파일 전체의 이전 행을 복사하여 새 .csv 파일에 추가하는 명령을 어떻게 작성할 수 있습니까?

미리 감사드립니다!

답변1

head -q -n 1 *.csv > output.csv
-q정상적으로 인쇄되는 헤더를 억제하고 -n 1첫 번째 줄만 인쇄합니다.

답변2

CSV 파일이 모두 헤더를 포함하고 줄 바꿈이 포함된 필드를 포함할 수 있다고 가정하면 각 파일에서 실행할 수는 없습니다 head(이렇게 하면 레코드가 잘릴 수 있고 각 파일의 헤더도 포함되기 때문입니다).

headCSV 인식 도구를 사용하는 대신밀러( mlr), 더 나은 선택이 될 것입니다:

mlr --csv put -q 'FNR == 1 { emit $* }' *.csv

그러면 파일 이름 와일드카드 패턴과 일치하는 각 파일의 첫 번째 데이터 레코드가 출력됩니다 *.csv.

예:

$ cat file1
a,b
1,2
3,4
$ cat file2
a,b
5,6
7,8
$ cat file3
a,b
field one,"last
field
here"
$ mlr --csv put -q 'FNR == 1 { emit $* }' file[123]
a,b
1,2
5,6
field one,"last
field
here"

CSV 파일의 제목이 없으면 mlr해당 -N옵션을 사용하십시오.

관련 정보