• ベストアンサー

複数のファイルを読み込んで別々に書き出すには?

Perlで複数のファイル 001.txt, 002.txt, 003.txt を一度に読み込み、行頭に行番号を付け、それぞれ 001.OUT, 002.OUT 003.OUT というファイル名で出力するためにはどうすればよいでしょうか? できますでしょうか? よろしくお願いします。

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

  • ベストアンサー
回答No.3

先程のコードに誤りがありました。 正しくは for (@ARGV) { open my $old, $_ or die "$_: $!"; my $buf; my $line; $buf .= "$. $line" while $line = <$old>; close $old; s/\..+?$/.OUT/; open my $new, "> $_" or die "$_: $!"; print $new $buf; close $new; } です。 7c7 < s/\..+$/.OUT/; --- > s/\..+?$/.OUT/;

dejaboo
質問者

補足

ありがとうございます。 これを適当にtest.plというファイルに保存してperl test.plと実行する、であってますでしょうか? これをしてみましたがうまくいきませんでいた。 どこか間違っていましたら教えていただけると助かります。

その他の回答 (4)

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

use File::Basename; system("cat -n $_ > " . basename($_) . ".OUT") for @ARGV; でできたりして.

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.4

>スクリプトの具体的な内容も教えていただけると非常に助かります。 要するに丸投げで、スクリプトそのもの寄越せ。ですか。 #3のスクリプトを、コマンドライン引数にファイル名渡せば動くでしょ。

dejaboo
質問者

お礼

すみません、やり方を勘違いしていました。 ありがとうございます。

回答No.2

$ perl -e 'do { open $old, $_ or die "$_: $!"; my $buf; $buf .= "$. $line" while $line = <$old>; close $old; s/\..+$/.OUT/; open $new, ">$_" or die "$_: $!"; print $new $buf; close $new } for @ARGV' 001.txt 002.txt 003.txt いえ、ワンライナーでやれるようなコードではないですね。 正しいバージョン: for (@ARGV) { open my $old, $_ or die "$_: $!"; my $buf; my $line; $buf .= "$. $line" while $line = <$old>; close $old; s/\..+$/.OUT/; open my $new, "> $_" or die "$_: $!"; print $new $buf; close $new; }

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

perl スクリプト 001.txt 002.txt 003.txt のように起動すると、スクリプトの @ARGVという配列変数に コマンドラインで与えられたファイル名が入ってますから、 それを使って出力ファイル名を生成し、それに対して出力すればよいと思います。 まあ待ってりゃあ親切な誰かがスクリプト貼り付けてくれるでしょうけど。

dejaboo
質問者

補足

ありがとうございます。 スクリプトの具体的な内容も教えていただけると非常に助かります。

関連するQ&A