シェルスクリプトで少し速くファイルに出力する
連番の何かを書いたファイルを出力する場合、シェルスクリプトを書いて実行したりするのですが(RubyとかPythonとかでやりたいけどすぐに書けるほどスキルがない……)数が多いとそれなりに時間がかかります。
それが気になっていたのですが、ループでファイルに出力する際にちょっと記述に気を付ければすこしだけ高速に出力できるみたいです。
環境:RHEL 5.5 64bit
aaa.sh
#!/bin/sh for i in `seq 1 10000` do printf "%05d\n" $i >> aaa.dat done
bbb.sh
#!/bin/sh for i in `seq 1 10000` do printf "%05d\n" $i done > bbb.dat
diff
$ diff -u aaa.sh bbb.sh
--- aaa.sh 2011-07-28 10:20:14.000000000 +0900 +++ bbb.sh 2011-07-28 10:20:38.000000000 +0900 @@ -2,5 +2,5 @@ for i in `seq 1 10000` do - printf "%05d\n" $i >> aaa.dat -done + printf "%05d\n" $i +done > bbb.dat
実行してみる
$ time ./aaa.sh real 0m0.244s user 0m0.176s sys 0m0.047s $ time ./bbb.sh real 0m0.131s user 0m0.118s sys 0m0.013s
大体半分くらいでしょうか。結構かわるものですねえ。