次の命名規則に従うファイルがたくさんあります。
file1_d
, file2_d
, file3_d
, ...,fileN_d
k
最初のファイルを入力としてスクリプトに供給し、次のファイルk
を2番目のバッチとして供給したいと思います。たとえば、配列を使用してシェルスクリプトでこれを行う簡単な方法はありますか?
ベストアンサー1
スクリプトを複数回実行し、スクリプトを実行するたびに、一度に1つずつ、一括してスクリプトのコマンドライン引数としてファイルを提供したいとします。 (要件のもう1つの解釈は、スクリプトが標準入力からファイルを読み込み、一度k
に1つずつファイルをリンクして提供することです。以下のコードは、これらの解釈を達成するために少し変更するだけです。)
シェルでは、bash
スクリプトに提供されているチャンク配列を使用できます。
配列を作成するには:
files=( file*_d )
これにより、ワイルドカードパターンが展開され、file*_d
結果の名前がアルファベット順に配列に配置されます。数字順にファイル名が必要で、数字がゼロで埋められていない場合は、中かっこ拡張を使用する方が簡単です。
files=( file{1..N}_d )
...最大数はどこにあります(中括弧拡張範囲の変数は理解されていないため、実際の変数ではありませんN
)。bash
zsh
シェルで次のように配列を作成できます。
files=( file<->_d )
...番号順に並べ替えてください。以下のコードはとzsh
シェルで動作しますbash
。
その後、次のループでスクリプトを呼び出すことができます。
k=10
while [ "${#files[@]}" -gt 0 ]; do
./myscript "${files[@]:0:k}"
files=( "${files[@]:k}" )
done
これにより、配列の最初の全体が./myscript
呼び出され、その項目が配列から削除されます。配列が空になるまで続きます。k
files