ablog

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

Perlワンライナーでレコードセパレータを変更する

n または p オプションを指定すると Perl はデフォルトで1行ずつ読み込む。OSで固有に定義されている入力レコードセパレータを使って各行の終わりを検出する。-0digits オプションを使うとレコードセパレータ(レコードの区切り)を変更することができる。

  • 行モード(デフォルト)
perl -wple ...
  • 段落モード(1つ以上の空行をレコードセパレータと認識する)
perl -00 -wle ...
  • ファイルモード(ファイル全体を1レコードとして認識する)
perl -0777 -wle ...
  • 段落モードの例
perl -00 -wnle 'BEGIN{%h=();} /09:00/.../10:01/ and !/10:01/ and /^[0-9\/]{10} ([0-9]{2}:[0-9]{2}):[0-9]{2}/ and $h{$1}++;END{map{print "$_: $h{$_}"} sort keys %h;}' hoge.log 


[参考]
ミニマルPerl ―Unix/LinuxユーザのためのPerl習得法 P.21