- 締切済み
perl ファイルのデータを編集したい
初めまして、perl をやり初めたばかりです。作業は Linux 上で行ってます。 あるテキストファイル data.txt があります。 data.txt の中は、以下のようになっているとします。 100 200 300 400 500 600 これを読み込んで、例えば、 1 2 3 4 5 6 以上の様に各数字を百分の一にして出力したいと思ってます。 一応、色々と調べながらプログラムを書いてはみましたが 思う様に出力されません。以下そのプログラム。 #!/usr/bin/perl open(IN, "data.txt") or die ; @x = <IN>; close (IN); $ref_x = \@x; $n_data = @x; for ($i = 0; $i< $n_data; ++$i) { $$ref_x[$i] /= 100 ; print $x[$i], " "; } print"\n"; どなたか、perl にお詳しい方教えていただけないでしょうか? 宜しくお願い申し上げます。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- tatsu99
- ベストアンサー率52% (391/751)
質問者様のソースを出来るだけ生かすと、以下のようになります。 ------------------------------------------- #!/usr/bin/perl open(IN, "data.txt") or die ; @x = <IN>; close (IN); foreach $line (@x){ chomp($line); @elms = split(' ',$line); foreach $data (@elms){ print $data/100," "; } print "\n"; } ----------------------------
- shiren2
- ベストアンサー率47% (139/295)
こんな感じで動くと思いますよ。 正規表現のeで置き換えてるのがポイントです。 perl -pe 's|(\d+)|$1/100|ge' < data.txt
お礼
教えていただいた通りに試してみたら 上手く出力されました。 どうもありがとうございました。
- MillenniuM
- ベストアンサー率58% (42/72)
Linux なら必ず awk があると思うので、 awk '{for(i=1;i<=NF;i++){$i=$i/100}print}' < data.txt でどうでしょうか。
お礼
awk と言うのがあるのですか。 ありがとうございます。 早速試してみます。
- tatsu99
- ベストアンサー率52% (391/751)
補足要求です。 1行目が 123 2345 の場合、どのような結果をのぞんでますか。 1.23 23.45 ですか それとも 1 23 ですか?
補足
早速ありがとうございます。 1.23 23.45 の方でお願いします。
お礼
早速、試してみましたところ、 思う様に出力されました。 どうもありがとうございました。