範囲内のすべての数値に対してコマンドを実行する方法

範囲内のすべての数値に対してコマンドを実行する方法

次のようなことをしたい

specmd file5.awe
specmd file6.awe
specmd file7.awe
specmd file8.awe
specmd file9.awe
specmd file10.awe
specmd file11.awe
specmd file12.awe

これを行うための良い方法はありますか?私が考える最善の方法は

ruby -e "10.upto(15){|i| puts i}" | xargs -I {} specmd file{}.awe

これはRubyに依存し、この場合Rubyが不要なように感じるため、確かに良いアプローチではありません。

注:より多くのファイルがあります(例:file4.awefile13.awe)。いいえ必要なので、どのワイルドカード(おそらく?)も私が望むように動作しません。

答え1

Bashでは、組み込みコマンドを使用して範囲を繰り返すループを作成できます。

for i in {5..12}
do 
    specmd file${i}.awe
done

他の同様の状況のた​​めのより多くのオプションがあります。ここにリンクを残しておきます。

http://www.cyberciti.biz/faq/bash-for-loop/

答え2

私はこれが古い質問であることを知っていますが、抵抗することはできません。

forループもなく、whileループもなく、純粋なコマンドラインbashだけがあります。

echo file{5..12}.awe | xargs -n1 specmd

答え3

for f in file[5-9].awe file1[012].awe
do  : stuff with "$f" files
done

...いいえみんな世界中で彼らは同じです。

それ以外の場合は、次のようにできます。

x=4
while  [ 13 -gt "$((x+=1))" ]
do     : stuff with "file$x.awe"
done

...繰り返して反復子を生成する利点があり、ほとんどすべてのスクリプトシェルでデフォルトで動作します。(グローブも同様)

答え4

GNU Parallelを使用すると、次のようになります。

parallel specmd file{}.awe ::: {5..12}
seq 5 12 | parallel specmd file{}.awe
parallel specmd ::: file{5..12}.awe

関連情報