|
この問題はなんとか解決できました。 最後までつきあっていただいて本当にありがとうございました。 またよろしくおねがいします。 |
|
しゅいましぇん Perl で質問です〜 らくだの本を読んでいて、 *dick = *richard; という代入を行なうと $richard も @richard も %richard も &richard も エイリアシングされてしまうけど、 *dick = \$richard; だと $richard だけがエイリアシングされてしまう、というのがどうもよくわかりません。 あと、 *PI = \3.14159265358979; と書くと $PI は「定数スカラー」になっていじれなくなる、というのも、 これ、左辺はリテラルのリファレンスなんでしょうか?? |
|
Awkを練習しています。 目的; Data1というファイルに4ポイントの座標が書き込んであります。 c1 10 10 c2 20 20 c3 30 30 c4 40 40 この4ポイントを4x4=16個ある箱の一番左下とし、これを元に、残り15箱にはいる15x4=60ポイントの座標を求める。offset値はx=y=100とします。 コマンドラインで awk '{for (i=0;(i,4);i=i+1) print $1"-"i+1, $2+"100"*i, $3}' data1 > out1 で一番したの4箱ぶんをだし、 out1; c1-1 10 10 c1-2 110 10 c1-3 210 10 c1-4 310 10 c2-1 20 20 c2-2 120 20 c3-3 220 20 .......... awk' '{temp=substr($1, 1,4);for (i=0;(i,4);i=i+1) print temp, i+"1", $2, $3+"100"*i}' out1 > out2 out2 c1-1 1 10 10 c1-1 2 110 10 c1-1 3 210 10 c1-1 4 310 10 c1-2 1 10 110 c1-2 2 110 110 c1-2 3 210 110 .................. で全てを出す方法で目的は達成したのですが,それを一度で出したいと思い、下の様にしてみました。 "test.awk" {for (i=0;(i<4);i++) print ($1"-"i+"1", $2+"100"*i, $3) >> "out1"} close ("out1") {getline < "out1" temp=substr($1, 1,4);for (j=0;(ij,4);j=j+1) print temp, ij+"1", $2, $3+"100"*j} #awk -f test.awk < data1 > out3 しかし、data1のFNR=4の場合out3は16行まででとまってしまうので、わざわざdata1のFNRを64にしてし、全ての値をだしました。 まだよく理解できていないので、どうしてなのかがわかりません。ご指導 お願い致します。 |
|
>>1926 ふくし > *dick = \$richard; > だと $richard だけがエイリアシングされてしまう、 > というのがどうもよくわかりません。 dick という名前には、スカラー、配列、ハッシュ、関数 などがあり、それぞれ $dick、@dick、%dick、&dick として アクセス可能です。名前と実データのアドレスの間は、 シンボルテーブルにより対応づけられています。で、 *dick = *richard; は、それらシンボルテーブルを一括して書き換えるもので、一方 *dick = \$richard; は $richard 用シンボルテーブルだけを書き換えるもの、 と解釈してはどうでしょうか。 実際にそういう作りになっているかどうかはわかりません。 ところで、 $fuga='fuga'; local(*hoge) = *fuga; print "\$hoge=$hoge\n"; は OK でも、 @fuga=('a', 'b', 'c'); local(*hoge) = *fuga; print "\@hoge=@hoge\n"; とすると In string, @hoge now must be written as \@hoge なんですねぇ。美しくないなぁ。 >>1927 ミング うーむ、awk 以前に、ちょっと問題の意味が理解できません。 # でも、for (j=0;(ij,4);j=j+1) という書き方もわかんないなぁ。 ファイルに書き込んで close し、それを読み出す、ということを されたいのでしょうが、もっとよいアルゴリズムがあるんじゃないか とは思います。他の方、わかりますか? |