プロが教えるわが家の防犯対策術!

初めまして、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 にお詳しい方教えていただけないでしょうか?
宜しくお願い申し上げます。

A 回答 (4件)

質問者様のソースを出来るだけ生かすと、以下のようになります。


-------------------------------------------
#!/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";
}
----------------------------
    • good
    • 0
この回答へのお礼

早速、試してみましたところ、
思う様に出力されました。
どうもありがとうございました。

お礼日時:2013/12/04 10:11

こんな感じで動くと思いますよ。


正規表現のeで置き換えてるのがポイントです。

perl -pe 's|(\d+)|$1/100|ge' < data.txt
    • good
    • 0
この回答へのお礼

教えていただいた通りに試してみたら
上手く出力されました。
どうもありがとうございました。

お礼日時:2013/12/03 18:54

Linux なら必ず awk があると思うので、


awk '{for(i=1;i<=NF;i++){$i=$i/100}print}' < data.txt
でどうでしょうか。
    • good
    • 0
この回答へのお礼

awk と言うのがあるのですか。
ありがとうございます。
早速試してみます。

お礼日時:2013/12/03 17:39

補足要求です。


1行目が
123 2345
の場合、どのような結果をのぞんでますか。
1.23 23.45 ですか
それとも
1 23
ですか?

この回答への補足

早速ありがとうございます。

1.23 23.45  の方でお願いします。

補足日時:2013/12/03 17:27
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!