perlとawkのsubstr関数の違いにはまった
perlとawkのsubstr関数の違いにはまった。文字列から部分文字列を取得するperlスクリプトをawkに書き換えたら結果が異なった。
以下は、文字列"abcde"の1文字目から2文字、3文字目から3文字を取得する。
perlの場合
$ echo "abcde" | perl -lne 'print substr($_, 0, 2)' ab $ echo "abcde" | perl -lne 'print substr($_, 2, 3)' cde
awkの場合
$ echo "abcde" | awk '{ print substr($0, 0, 2) }' ab $ echo "abcde" | awk '{ print substr($0, 2, 3) }' bcd
perlもawkは、1文字目が0と思ったら、awkは1文字目が1のようだ(substrに2番目の引数)。だけど、以下の結果はすべて同じ、なぜなんだ。
$ echo "abcde" | awk '{ print substr($0, 0, 2) }' ab $ echo "abcde" | awk '{ print substr($0, 1, 2) }' ab $ echo "abcde" | awk '{ print substr($0, -10000, 2) }' ab
これは、ドキュメントやソースコードを読めということですね。