![CSV 파일을 간단하고 효율적으로 연결](https://linux55.com/image/74432/CSV%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EA%B0%84%EB%8B%A8%ED%95%98%EA%B3%A0%20%ED%9A%A8%EC%9C%A8%EC%A0%81%EC%9C%BC%EB%A1%9C%20%EC%97%B0%EA%B2%B0.png)
*.csv
다수의 CSV 파일( )이 있는 폴더를 생각해 보세요. 그들은 모두 똑같은 헤더를 가지고 있습니다.
동일한 헤더를 가진 단일 CSV 파일로 모두 효율적으로 연결하려면 어떻게 해야 합니까?
유사하지만 더 구체적인 문제에 대한 많은 해결책을 찾았습니다.
현재 awk
솔루션이 작동하지 않습니다.
$ cat concat_my_csv_files.sh
#!/usr/bin/env zsh
awk '
FNR==1 && NR!=1 { while (/^<header>/) getline; }
1 {print}
' $1/*.csv > $2
$ ./concat_my_csv_files /some/path/to/csv/files/ full_join.csv
내가 할 때 :
grep -F column_A full_join.csv
나는 그것과 함께 여러 줄을 본다.
답변1
awk '
NR == 1 {print}
FNR == 1 {next}
{print}
' *.csv
이 NR
변수는 모든 입력 레코드의 수입니다.
이 FNR
변수는 단순히 현재 파일의 레코드 번호입니다.
이는 awk가 보는 첫 번째 줄(첫 번째 파일의 헤더)을 인쇄한 다음 각 파일의 첫 번째 줄을 건너뛰고 다른 모든 줄을 인쇄합니다.
답변2
기본적으로 "head -n 1 firstorany.csv; tail -n +2 *.csv"를 원합니다.
set -- *.csv
head -n 1 "$1"
tail -n +2 "$@"
*.csv가 sh 스크립트의 매개변수로 사용되는 경우 첫 번째 줄을 생략합니다.