作者: 藤岡和夫
日時: 2005/2/05(16:43)
On Sat, 05 Feb 2005 02:46:03 +0900
"Bruce." <kbk@...> さんwrote:

> ちょっと調べてみましたが、print関数の引数に直接length()の戻り値を
> 使うとおかしくなるようです。いったん変数に受けてやって、その変数を
> 使って出力すると正常に動作します。
> 
> もう少し追いかけてみます。
> 
> ただ、単にprint関数の引数にlength()を使ったサンプルを作ってみると
> これはちゃんと動くのが謎なんですが。

 藤岡です。お世話になります。

 print関数の引数の書き方をいろいろ変えて試してみました。

 次のように書くと、hello2.awkを入力すると問題は出ませんが、hello.awkを
入力すると二箇所でおかしくなります。下記のhello3.awkを入力すると同じ現象
が起こります。

----^ hello2.awk
BEGIN{
	print "Hello world"
	print "ハローワールド"
}
/ハロー/{print}
/Hello/{print}
{print $0, ":length=", length($0)}
{print $0, ":index=", index($0, "ロ")}
----$

 次のようにスクリプトを書くと問題が出なくなりました。hello.awk、
hello2.awk、hello3.awkのいずれでも問題ありません。

----^ hello3.awk
BEGIN{
	print "Hello world"
	print "ハローワールド"
}
/ハロー/{print}
/Hello/{print}
{print $0 ":length=", length($0)}
{print $0 ":index=", index($0, "ロ")}
----$

 現象論で申し訳ありませんが、何かのご参考になればと思います。

藤岡 和夫
kazuf@...
TS Networkのために http://homepage1.nifty.com/kazuf/