[Linux] seq コマンドの存在を知る
卒研でシミュレーションをやってると,パラメータの変更をして再度実験,という作業を何度も行います.こんなとき私はシェルスクリプトを書くわけです.
例えば,「パラメータを 0 から 10 まで 1 ずつ増やしてコマンド hoge を実行」という場合に,私が今までに書くスクリプトは次のようなものです.
#!/bin/bash p=0 while [ $p -le 10 ]; do hoge $p; p=`expr $p + 1`; done
さて,これだけでも十分面倒でしたが,これが浮動小数点(例えば,0.0 から 1.0 まで 0.1 ずつ増加)になると... 私は次のように書いていました.
#!/bin/bash p=0.0 c=0 while [ $c -le 10 ]; do hoge $p; p=`echo "$p + 0.1" | bc -l | sed 's/^\./0\./'` c=`expr $c + 1`; done
expr コマンドと [ (test) コマンドは整数の比較しかできないので,整数のループカウンタ c を別途用意しています.そして,浮動小数点の加算は bc コマンドに行わせます.さらに,bc コマンドは計算結果の整数部が 0 の場合に ".3" といった出力をするので,sed コマンドを用いて "0.3" になるよう,頭に 0 を追加しています.
私が悲惨なシェルスクリプトを書いていたのは分かりましたね? それでは本題です.
こんな努力をしなくてすむコマンドを見つけてしまいました.seq コマンドです.
次のように入力するだけで,簡単に数列が生成できます.
% seq 0 1 10 0 1 2 3 4 5 6 7 8 9 10 %
嬉しいことに,浮動小数点数にも対応しています.
% seq 0 0.1 1.0 0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 %
あとはこれを for 文に食わせるだけです! これで私は変なシェルスクリプトを書かずに済みます.
トラックバック
トラックバック URI: https://www.pakunet.jp/hoge/trackback/2004090701
トラックバックはありません.