T

シェルスクリプトに無知なもので

bashで文字列を変数に展開するのにsedを何回も呼ぶのはいかがなものかと思ったので、なんとからなんかといじっていたら、文字列を分解して変数に展開するのは配列を使ってこういう感じでやるのかと気づいた。

$ cat test.sh
#!/bin/bash
TESTDATA="1 2"
DATA=(`sed <<< $TESTDATA -e s/[^0-9]/\ /g`)
echo ${DATA[0]}
echo ${DATA[1]}

$ ./test.sh
1
2

そこで他にもないか調べていたら、sedの呼び方は

$ echo $AAA | sed -e s/3/aho/g

より

$ sed <<< $AAA -e s/3/aho/g

の方が早いらしい

ちょっと計ってみた。

#!/bin/sh
MAX=1000
COUNT=1
while [ $COUNT -le $MAX ];
do
        echo $COUNT | sed -e s/[0-9]/hoge/g
        COUNT=`expr $COUNT + 1`
done

これと

#!/bin/sh
MAX=1000
COUNT=1
while [ $COUNT -le $MAX ];
do
        sed <<< $COUNT -e s/[0-9]/hoge/g
        COUNT=`expr $COUNT + 1`
done

これで計測した結果。

MAXを1000にしたら
echo      :real 0m4.470s
ヒアドキュメント:real 0m3.679s

MAXを10000にしたら
echo      :real 0m43.403s
ヒアドキュメント:real 0m36.990s

とっても素直な結果だ。

Posted by on 6月 25, 2008 in Linux

コメントを残す