代入するとそっちも代わるのか。。。
ついシェルと同じつもりで
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 と書くようにしている。
ようは気の持ちようである。