読者です 読者をやめる 読者になる 読者になる

or1ko's diary

日々を書きます

awkの多次元配列の添字

misc

追記2:(多次元配列的ですが,多次元配列ではないです.ハッシュです! 詳しくはThe GAWK Manual - awk$B$K$*$1$kG[Ns(B)
トラックバック先のコメントみて,危険な日記になっていたことに気づきました.(^.^)

以下,元の文.

ちょっと不安になったので、やってみた。

$ awk 'BEGIN { a[0,1] = 36; print a[0,    1] }'
36 

やっぱり大丈夫。

Awkでは、空白は文字列の結合演算として定義されているから大丈夫だと思っていた。
なので、以下のような奴も動く

$ awk 'BEGIN { a[0,11] = 36; print a[0,1    1] }'
36 

でも、カンマと1の間にある空白が文字列結合的な動きをしているかどうかは知らない。

ついでにperlでもやってみた。

$ perl -e '$a[0,1] = 36; print $a[0,      1];'
36

これは期待したと通りに動いた。
こっちは、

$ perl -e '$a[0,11] = 36; print $a[0,1      1];'
Number found where operator expected at -e line 1, near "1      1"
        (Missing operator before       1?)
syntax error at -e line 1, near "1      1"
Execution of -e aborted due to compilation errors.

やっぱり動かないですよね。

空白で文字列結合ができるところはawkが微妙に好きな所の一つです。まぁ、他の言語ならきっと+(プラス)を書けば良いので、コスト的に同じかな??? いや、スペースキーの方が断然押下しやすい。

追記1:
perlの[]は多次元配列的には使えません.
perlの多次元配列の話 - ori’s diary