14歳の自分に衝撃の事実を告げてください

テキストファイルの本文中に行番号を挿入するperlスクリプトが有る、と聞いて探しているのですが、見付かりません。何か手掛かりをご存知の方がいらっしゃいましたら、ご教示をお願いいたします。

※「本文中に行番号を挿入する」とは、(テキストエディタやOSなどの)環境・設定が異なる人同士で情報交換する際でも、同じ行番号で同じ行を特定できるようにすることを意図しています。

A 回答 (4件)

$. が「現在の行番号」を表します. で, $_ が「読み込んだ行」なので "$.: $_" で「読み込んだ行の前に行番号を追加する」ということになります.


あと, 書式が必要なら指定できる printf もちゃんと用意されてます. 使える書式はだいたい C と同じです.
ということで Leopard なら
perl -ne 'printf "%06d: %s", $., $_' ファイル名
でいいし, Windows でも
printf "%06d: $s", $., $_ while <>;
というスクリプトを書いて
perl スクリプト ファイル名
で OK.
ただし複数のファイルを一度に処理しようとすると行番号が「前のファイルの続き」になるのは同じ.
    • good
    • 1
この回答へのお礼

望みが100%かないました。
ありがとうございました。感謝感激です。
今はコピペしているだけですが、解説文の意味を理解できるように
精進します。

お礼日時:2008/07/23 22:16

1つのファイルの各行に行番号を付けるということだと:


使ってる OS によるけど Unix なら
cat -n ファイル名
が最も簡単. ど~しても Perl を使いたいのなら
perl -ne 'print "$.: $_"' ファイル名
でいける (出力は適宜リダイレクトする). Windows はクオートまわりが弱いのでワンライナーにならないけど
print "$.: $_" while <>;
とだけ書かれたスクリプトを使う (こちらも出力は適宜リダイレクト) のがきっと楽だと思う.
複数のファイルに対しそれぞれ個別に行番号を付けるなら #2 に近い方法です.
    • good
    • 0
この回答へのお礼

期待していた以上に(初心者にも十分に)簡単な方法を教えて
いただきまして、感激です。perlに固執してはいませんので、catでも
(しかも簡単に)実現できることに非常に驚きましたし、また、
為になりました。
更に欲張って、質問しますが、行番号の桁数を指定する方法は
有りますか。例えば、6桁指定の場合は、
000001
000002
000003
となるような方法です。ちなみに、自分が利用できる環境は、
Windows Vista, Mac OS X 10.5 (Leopard)です。テキストファイルを
扱える限り、手段を問いません(始めから明言しておけば良かったですね)。

お礼日時:2008/07/23 21:28

こんなんでどうでしょうか。



#!/usr/bin/perl
use strict;
use warnings;

my $filename = 'text.txt'; #行番号を挿入したいファイル
my $tmpfile = 'text.tmp';
my $count = 1;

open my $fh, '<', $filename or die "can`t open $filename : $!\n";
open my $tmp, '>', $tmpfile or die "can`t write $tmpfile : $!\n";

while(<$fh>){
print $tmp "$count : $_";
$count++;
}

close $fh;
close $tmp;

unlink($filename) or die "can`t delete $filename : $!\n";
rename($tmpfile, $filename);
    • good
    • 0
この回答へのお礼

勉強不足のせいか、望みを実現できませんでした。
改めて勉強し直します。
ご回答、ありがとうございました。

お礼日時:2008/07/23 22:02

ここで解説しているスクリプトでできないでしょうか?


http://www.geocities.jp/m_hiroi/perl_tk/perltk07 …

ダウンロードはできませんが、最後にソースがあります。
    • good
    • 0
この回答へのお礼

勉強不足のせいか、望みを実現できませんでした。
改めて勉強し直します。
素早いご回答、ありがとうございました。

お礼日時:2008/07/23 22:01

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


おすすめ情報