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
로 정렬합니다 . 필요한 경우 명령을 여러 명령 호출로 분할하여 명령에 전달할 수 있는 인수 수 제한을 해결할 수 있습니다.n
out.csv
zargs
bash
shell 의 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에 표시된 것과 같은 이름을 가진 파일에 적용되며 다른 곳에는 공백이나 숫자가 포함되어 있지 않습니다.