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
(이렇게 하면 레코드가 잘릴 수 있고 각 파일의 헤더도 포함되기 때문입니다).
head
CSV 인식 도구를 사용하는 대신밀러( 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
옵션을 사용하십시오.