헤더와 유형이 동일한 모든 파일 가져오기

헤더와 유형이 동일한 모든 파일 가져오기

cat같은 이름의 파일을 모두 하나의 파일에 넣고 타이핑을 해보았습니다 .

예를 들어, cat out1.csv out2.csv out3.csv > out.csv. 하지만 내 데이터 세트가 너무 커서 이 작업을 수행하려고 했습니다 cat out/*.csv > out.csv. 작동하지 않습니다.

저는 쉘 스크립팅의 초보자입니다. 누군가 내가 뭘 잘못하고 있는지, 어떻게 고칠 수 있는지 말해 줄 수 있나요?

답변1

쉘 포함 zsh:

autoload zargs
zargs -- out<->.csv(n) -- cat > out.csv

이름이 로 시작하고 out그 뒤에 소수점이 오는 모든 파일을 연결한 다음 숫자 .csv로 정렬합니다 . 필요한 경우 명령을 여러 명령 호출로 분할하여 명령에 전달할 수 있는 인수 수 제한을 해결할 수 있습니다.nout.csvzargs

bashshell 의 GNU 구현을 사용하면 xargs다음과 같은 작업을 수행할 수 있습니다.

xargs -r0a <(
  shopt -s failglob extglob
  pattern='out+([0123456789]).csv' IFS=
  printf '%s\0' $pattern | sort -zV) cat > out.csv

답변2

for file in out[0-9]*.csv; do
    cat "$file"
done >out.csv

답변3

내장된 Bourne 파생 쉘과 함께 DSU(장식/정렬/장식 취소) 관용구를 사용 printf하고 입력 파일을 숫자 순서대로 인쇄하려고 한다고 가정합니다.

printf '%s\n' out[0-9]*.csv |
awk -F'[^0-9]+' -v OFS='\t' '{print $2, $0}' |
sort -k1,1n |
cut -f2- |
xargs cat > out.csv

위의 내용은 OP에 표시된 것과 같은 이름을 가진 파일에 적용되며 다른 곳에는 공백이나 숫자가 포함되어 있지 않습니다.

관련 정보