おぼえがき

おぼえがき

awk 正規表現で絞込みの速度

2007-01-16 | sed awk
time awk -F" " '/正規表現/ {print $1,$5}' ${ファイル}
real 0m13.641s
user 0m13.528s
sys 0m0.127s

time awk -F" " '{print $1,$5}' ${ファイル} | grep '正規表現'
real 0m2.331s
user 0m3.505s
sys 0m0.208s


んーーー。
処理速度がぜんぜん違う。

前者のほうが、個人的には良いんだけど、この速度差を考えると、
後者だなぁ。

何でだろう。。。

って思ってたけど、

time awk -F" " 'match($5,/正規表現/) {print $1}' ${ファイル}

real 0m2.101s
user 0m1.971s
sys 0m0.136s

おおーー速くなった。
awkの組み込み関数のmatchを使えば、指定したフィールドに対して正規表現をかけて、取得したいカラムをprintできる。

こりゃ良い。

たぶん、一番初めに書いたやり方は、一行全てを正規表現に引っ掛けてるんだろう。

sed の一時ファイル

2007-01-15 | sed awk
ファイル
a
b
c
d


ってファイルがあってさ、
bをXに変えたいと気って

sed -e "s/b/X/g" ${ファイル} > ${ファイル.tmp};
mv ${ファイル.tmp} ${ファイル}

って感じでやってたんだけど、
実は、

sed -i -e "s/b/X/g" ${ファイル}

で、いけるらしぃ

ふーん

bash shopt

2007-01-15 | bash
shoptコマンドで、bashの設定が見れて、
-sコマンドで、有効・無効の設定ができる。

たとえば。。。。

extglob を on
にすると、シェル上で、正規表現を使うことができる。



こんなところまで、変更したりすると、移植性とか低くなりそうな
きがするなぁ

ってことで、これは、あんま使わないようにする。