cat
同じ名前のファイルをすべて1つのファイルに入れてタイピングをしてみました。
たとえば、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に表示されているのと同じ名前のファイルに適用され、他の場所にはスペースや数字は含まれていません。