ablog

不器用で落着きのない技術者のメモ

テキストファイル中の最長行の文字数を求める Perl ワンライナー

解決 - MATSU’s vision


Perl ワンライナーでやってみた。

$ perl -nle '$a=length if($a<length);END{print $a}' orcl_ora_879.trc 
73


追記:
こういう書き方もあるのか。

$ perl -MList::Util=max -lne 'push(@a,length);END{print max(@a)}' orcl_ora_879.trc 
73

(↓)このへんを参考にしました。

max(List::Util)

 配列の要素の最大値を求めるにはList::Utilモジュールのmax関数を使用します。

use List::Util qw(max);
$ret = max(@array);
よく使用する関数・標準モジュール一覧 - Perlゼミ(サンプルコードPerl入門)
perl -MList::Util=min,max -e 'my(@arr) = (1, 2, 3); print min(@arr), max(@arr), "\n";'
ワンライナー化モジュールAcme::OneLinerを更新 - すぎゃーんメモ


追記(2009/09/07):
いきなり仕事で役に立った。
(↓)こんな感じのことをした。

perl -MList::Util=min,max -lne '/^(.{12}).*(foo|bar)/ and push(@a,$1);eof and printf "%s %s %s\n",substr($ARGV,3,7),min(@a),max(@a) and @a=()' hoge<1-500>.log

複数のファイルを処理するときに、1ファイルにつき最後に1回だけ何か処理したいときは eof を使えばいいのか。
END{} は全ファイルを処理した後に1回だけ何か処理したいときに使う。