- ベストアンサー
文字列の置換について
ban5.txtには以下になってます。 4131048 4131053 x x 4850328 x x x x 3870357 3870369 x x 4131038 4131045 x x x この場合にxの行を一番最後の行の数値に置き換えたい場合 perlだとどのようにすればいいんでしょうか。 シェルでやろうとしたんですけどシェルだとちょっと難しいみたいなので perlでやりたいと思ってます。誰かいいスクリプトを教えて下さい。 宜しくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
先に回答が出てありますが、 それでは、ファイルの最後に記述された数字で埋められます。 x に最も近い手前の数値で埋めるには以下のようになります。 my $new; my $last_str; open FILE, '+<ban5.txt' or die; while (<FILE>) { chomp; if ($_ eq 'x') { $_ = $last_str } $new .= $_ .\n; $last_str = $_; } seek FILE, 0, 0; print FILE $new; close FILE; もっと工夫した書き方も色々と出来ますが、 全体の流れを原始的に書くとこのような感じになります。
その他の回答 (2)
- atom_seed
- ベストアンサー率48% (25/52)
my $data; my $last_num; open( FH, "ban5.txt" ); while (<FH>) { $data .= $_; $_ =~ /(\d+)/; $last_num = $1 if ($1); } close(FH); # 最後のデータでxを置換 $data =~ s/x/$last_num/g; # 上書き open( OUT, ">ban5.txt" ); print OUT $data; close(OUT);
- Tacosan
- ベストアンサー率23% (3656/15482)
その例だと, 最終的にどうなっていればいいんですか?
補足
お返事ありがとうございます。 例でいくと最終的には以下のようになって欲しいです。 宜しくお願いします。 4131048 4131053 4131053 4131053 4850328 4850328 4850328 4850328 4850328 3870357 3870369 3870369 3870369 4131038 4131045 4131045 4131045 4131045
補足
ご回答ありがとうございます。 今日はもう時間が時間なので明日ゆっくりと試してみます。ありがとうございます。