行番号をつけるPerlスクリプト


仕事中に「ファイルの中身の先頭から1,2,3...と言った風に行番号を付けたい」といった話がでた。Excelでぱっぱと作りたいところだけど、行数が6万を越えるのでExcelでは扱えないとの事。
こんなときごみスクリプターな自分は、今日もこんなごみスクリプトを作る。

#!/usr/bin/perl $i=1; while(){ print $i.','.$_; $i++; }

これをAddNum.plとかで保存して実行権限をつける。 あとは

$ AddNum.pl InputFile > OutputFile

と入力するとInputFileの各行に行番号を振ったものがOutputFileとなって作成される。
いやぁお手軽です。

こういったプログラム作るのにはPerlは向いてるよなぁ。

そしてまたごみスクリプトが一つできるのであった。

作成日:2008/02/19 03:12:40
トラックバック  ※トラックバックは承認後に表示されます。
TrackbackURL:このページのトラックバックの受付は終了しています。

トラックバックはありません。
コメント
1
残念かっし〜 19Feb2008 01:51PM
cat -n InputFiile < OutputFile
です。
2
そうし 21Feb2008 02:43AM
> かっしー
こないだ直接話したけど、「,」を付けたいのでcatじゃ厳しいっす。
どうでもいいけど、perlで一番短そうな書き方。

$ perl -e 'while(<>){print++$i.",$_"}' [FILE]

…読みづらいな…。
3
激しく今更ですが・・・通りすがり 7May2008 04:33PM
ちょっと見かけたもので・・・。
一般的には、

$ perl -pe '$_ = "$.,$_"; close(ARGV) if eof;' [File1 File2 ...]

ですね。全ファイルくっついちゃいますが(^^;
1ファイルだけで良ければ、

$ perl -pe '$_ = "$.,$_";' [File]

で。
ちなみに、元ファイルを変更してしまって良ければ、

$ perl -pi.bak -e '$_ = "$.,$_"; close(ARGV) if eof;' [File1 File2 ...]

で。.bak が付いたバックアップファイルも出来ます。
4
そうし 9May2008 02:48AM
> 通りすがりさん
どもつっこみありがとうございます。
$.って知らなかった…勉強になります。
そして-pってなオプションもあるんですね。

次からはこの方法を使いますー。
むーperl奥が深し。
名前:

タイトル:

コメント: