• ベストアンサー

文字列の置換について

ban5.txtには以下になってます。 4131048 4131053 x x 4850328 x x x x 3870357 3870369 x x 4131038 4131045 x x x この場合にxの行を一番最後の行の数値に置き換えたい場合 perlだとどのようにすればいいんでしょうか。 シェルでやろうとしたんですけどシェルだとちょっと難しいみたいなので perlでやりたいと思ってます。誰かいいスクリプトを教えて下さい。 宜しくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • kodomo55
  • ベストアンサー率57% (8/14)
回答No.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)
回答No.2

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);

panda_tky
質問者

補足

ご回答ありがとうございます。 今日はもう時間が時間なので明日ゆっくりと試してみます。ありがとうございます。

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

その例だと, 最終的にどうなっていればいいんですか?

panda_tky
質問者

補足

お返事ありがとうございます。 例でいくと最終的には以下のようになって欲しいです。 宜しくお願いします。 4131048 4131053 4131053 4131053 4850328 4850328 4850328 4850328 4850328 3870357 3870369 3870369 3870369 4131038 4131045 4131045 4131045 4131045

関連するQ&A