I ♥ WordPress

[時間割:Perl]『ミニマルPerl』その11
2009/01/02 03:11 posted by kunkichi

既に元旦も終わってますが、まあ元旦の分ということで(笑)。今年一発目の「Perl」の時間です。前回に引き続き、Perl で AWK を実現するところ。今回はAWKの最も得意なフィールド処理をPerlでやっていきます。

  • -naが前提とします。
  • 各フィールドは@Fに代入され、各フィールドへは配列のインデックスでアクセスできる。
  • 配列を変数に代入する場合、「途中」で不要なフィールドがある場合は、undefを使う。$ echo "aaa bbb ccc" | perl -wnla -e '($first,undef,$third)=@F;print "$first $third";'
    aaa ccc
    最初から途中までの場合は、単に指定しないだけでOK。
  • AWKとPerlで変数をprintで出力する場合、
    • AWKは変数をカンマ、もしくはスペースで並べる(AWKはダブルクォート内で変数展開とかされないので複数の引数を取りたい場合は必須)。スペースの場合は連結して出力、カンマの場合はOFSで指定されているセパレータを使って区切り出力される。
    • Perlはダブルクォート内で変数展開できるので、複数の変数もダブルクォートで囲んで単一の引数とすれば意識する必要なし。あえて複数の引数を指定する場合は必ずカンマで区切ること。この場合、セパレータはダブルクォート内に入れてしまうか、$,に定義する必要がある。$ echo "aaa bbb ccc" | perl -wnla -e '($first,undef,$third)=@F;print $first,$third;'
      aaaccc
      $ echo "aaa bbb ccc" | perl -wnla -e '($first,undef,$third)=@F;$,=" ";print $first,$third;'
      aaa ccc
  • 入力レコードを特定の文字列で分割する場合はAWKと同じく、-Fを使う。

ちょっと短めだけど、元旦の夜だし、まずは少しでも毎日やることを大事にしたいと思います。

コメント&トラックバック

トラックバックURL





このページの先頭へ