代入するとそっちも代わるのか。。。

ついシェルと同じつもりで

awk '$2 = 1 {print }' file

と書いて、出力が

100 1
101 1
102 1
149 1

となっていたから、= で比較できるんだなどと思ったら、なんと$2に代入した結果が$0 にも反映されているなどと気がつかずに、ドツボにはまってしまった。。。

まさか、こんな副作用があるなんて。
やっぱりちゃんと本を読むか、awkを使わずにperlで書くかしないとだめやな。。。まあこういうのが探求心をそそるけど、急いでいるときは逆効果...orz


それに定数と比較する際は

100 == $1 {}

のような記法を徹底すべきだな。。。
そうすれば、Cとかでもif(100 = num)とかいうミスをしなくてすむんだけど。

C++ 使うようになって、c++は必要じゃないところでは ++cと書くようにしたけど、1 == num 見たいな書き方って身につかない。つい先に変数を書いてしまう。


ちなみに、++cとc++の違いだけど、これは++演算子オーバーロードしたときのことを考えればわかるだろうけど、c++だとcの値を取っておいてcに++を呼び出すことになるから、厳密にはc++の方が++cよりも重い処理ということになる。
まあ、それがパフォーマンスに影響することはないだろうけど、それを始めて知ったときに目から鱗だったので、その考え方に敬意を払って、スクリプトでも ++$c と書くようにしている。
ようは気の持ちようである。