- ベストアンサー
テキストファイルの本文中に行番号を挿入するperlスクリプトを探しています。
テキストファイルの本文中に行番号を挿入するperlスクリプトが有る、と聞いて探しているのですが、見付かりません。何か手掛かりをご存知の方がいらっしゃいましたら、ご教示をお願いいたします。 ※「本文中に行番号を挿入する」とは、(テキストエディタやOSなどの)環境・設定が異なる人同士で情報交換する際でも、同じ行番号で同じ行を特定できるようにすることを意図しています。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
$. が「現在の行番号」を表します. で, $_ が「読み込んだ行」なので "$.: $_" で「読み込んだ行の前に行番号を追加する」ということになります. あと, 書式が必要なら指定できる printf もちゃんと用意されてます. 使える書式はだいたい C と同じです. ということで Leopard なら perl -ne 'printf "%06d: %s", $., $_' ファイル名 でいいし, Windows でも printf "%06d: $s", $., $_ while <>; というスクリプトを書いて perl スクリプト ファイル名 で OK. ただし複数のファイルを一度に処理しようとすると行番号が「前のファイルの続き」になるのは同じ.
その他の回答 (3)
- Tacosan
- ベストアンサー率23% (3656/15482)
1つのファイルの各行に行番号を付けるということだと: 使ってる OS によるけど Unix なら cat -n ファイル名 が最も簡単. ど~しても Perl を使いたいのなら perl -ne 'print "$.: $_"' ファイル名 でいける (出力は適宜リダイレクトする). Windows はクオートまわりが弱いのでワンライナーにならないけど print "$.: $_" while <>; とだけ書かれたスクリプトを使う (こちらも出力は適宜リダイレクト) のがきっと楽だと思う. 複数のファイルに対しそれぞれ個別に行番号を付けるなら #2 に近い方法です.
お礼
期待していた以上に(初心者にも十分に)簡単な方法を教えて いただきまして、感激です。perlに固執してはいませんので、catでも (しかも簡単に)実現できることに非常に驚きましたし、また、 為になりました。 更に欲張って、質問しますが、行番号の桁数を指定する方法は 有りますか。例えば、6桁指定の場合は、 000001 000002 000003 となるような方法です。ちなみに、自分が利用できる環境は、 Windows Vista, Mac OS X 10.5 (Leopard)です。テキストファイルを 扱える限り、手段を問いません(始めから明言しておけば良かったですね)。
- s1m00py
- ベストアンサー率0% (0/4)
こんなんでどうでしょうか。 #!/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);
お礼
勉強不足のせいか、望みを実現できませんでした。 改めて勉強し直します。 ご回答、ありがとうございました。
- mk48a
- ベストアンサー率56% (1133/2007)
ここで解説しているスクリプトでできないでしょうか? http://www.geocities.jp/m_hiroi/perl_tk/perltk07.html ダウンロードはできませんが、最後にソースがあります。
お礼
勉強不足のせいか、望みを実現できませんでした。 改めて勉強し直します。 素早いご回答、ありがとうございました。
お礼
望みが100%かないました。 ありがとうございました。感謝感激です。 今はコピペしているだけですが、解説文の意味を理解できるように 精進します。