ヘッダーとタイプが同じすべてのファイルをインポートする

ヘッダーとタイプが同じすべてのファイルをインポートする

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でソートします。必要に応じて、コマンドを複数のコマンド呼び出しに分割して、コマンドに渡すことができる引数の制限を解決できます。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に表示されているのと同じ名前のファイルに適用され、他の場所にはスペースや数字は含まれていません。

関連情報