- ベストアンサー
複数のファイルを読み込んで別々に書き出すには?
Perlで複数のファイル 001.txt, 002.txt, 003.txt を一度に読み込み、行頭に行番号を付け、それぞれ 001.OUT, 002.OUT 003.OUT というファイル名で出力するためにはどうすればよいでしょうか? できますでしょうか? よろしくお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
先程のコードに誤りがありました。 正しくは 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/;
その他の回答 (4)
- Tacosan
- ベストアンサー率23% (3656/15482)
use File::Basename; system("cat -n $_ > " . basename($_) . ".OUT") for @ARGV; でできたりして.
- sakusaker7
- ベストアンサー率62% (800/1280)
>スクリプトの具体的な内容も教えていただけると非常に助かります。 要するに丸投げで、スクリプトそのもの寄越せ。ですか。 #3のスクリプトを、コマンドライン引数にファイル名渡せば動くでしょ。
お礼
すみません、やり方を勘違いしていました。 ありがとうございます。
- _--_--_-_-
- ベストアンサー率47% (8/17)
$ 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)
perl スクリプト 001.txt 002.txt 003.txt のように起動すると、スクリプトの @ARGVという配列変数に コマンドラインで与えられたファイル名が入ってますから、 それを使って出力ファイル名を生成し、それに対して出力すればよいと思います。 まあ待ってりゃあ親切な誰かがスクリプト貼り付けてくれるでしょうけど。
補足
ありがとうございます。 スクリプトの具体的な内容も教えていただけると非常に助かります。
補足
ありがとうございます。 これを適当にtest.plというファイルに保存してperl test.plと実行する、であってますでしょうか? これをしてみましたがうまくいきませんでいた。 どこか間違っていましたら教えていただけると助かります。