トップ 差分 一覧 ソース 検索 ヘルプ PDF RSS ログイン

Niigata.pm

Niigata.pmへ行ってきた

http://niigata.pm.org/

tech talk #3

2014/12/13(土)2年ぶりにNDSと共催でniigata.pm tech talk#3,NDS39が開催されました。今は出稼ぎ状態なので朝、東京から長岡に新幹線で出発しました。国境のトンネルを抜けるとそこは雪国だった。近年に無い大雪(きっと記録に残る大雪でしょう)お昼前に長岡に付いたので、お昼を食べるため久しぶりの長岡なので燕背脂系太麺の安福亭にいってきました。旨かった〜 皆さんも1度食べてください。やっぱチャッチャ系ラーメンは美味い。。。

内容

情報

tech talk #2

夏だ!Perlだ!データ処理だ!

1行野郎(One-Liner)

「perlでデータ処理」をテーマにネタを探しているとOne-Linerでテキストデータの変換が手ごろで、たまに使うのでOne-Linerの紹介をする。One-Linerはプロンプトから1行でパラメータを入力してコマンド(perl)に仕事をしてもらいます。

URLをデコードする

アクセスログ(log.txt)中のURLエンコードされている文字列をデコードする

perl -ple 's/%([0-9A-Fa-f][0-9A-Fa-f])/pack(q(H2),$1)/eg;' /tmp/log.txt>/tmp/log2.txt

[log.txt]
memo 2012/07/04 14:36:35 210.196.92.162 http://www.google.co.jp/url?sa=t&rct=j&q=%E7%84%A1%E7%B2%BE%E3%83%BB%E7%9F%AD%E6%B0%97%E3%83%BB%E5%82%B2%E6%85%A2&source=web&cd=17&ved=0CG0QFjAGOAo&url=http%3A%2F%2Fpark15.wakwak.com%2F~k-lovely%2Fcgi-bin%2Fwiki%2Fwiki.cgi%3Fpage%3Dmemo&ei=TtbzT6aWDMHdmAX3q_iYBQ&usg=AFQjCNGYnLVF6gyguAh65nIoCI95U6VRGQ Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
Niigata%2Epm 2012/07/04 14:36:47 210.196.92.162 http://park15.wakwak.com/~k-lovely/cgi-bin/wiki/wiki.cgi?page=memo Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
Niigata%2Epm 2012/07/04 14:37:22 125.200.79.43 http://park15.wakwak.com/~k-lovely/cgi-bin/wiki/wiki.cgi?page=JSON Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.5 Safari/534.55.3
[log2.txt]
memo 2012/07/04 14:36:35 210.196.92.162 http://www.google.co.jp/url?sa=t&rct=j&q=無精・短気・傲慢&source=web&cd=17&ved=0CG0QFjAGOAo&url=http://park15.wakwak.com/~k-lovely/cgi-bin/wiki/wiki.cgi?page=memo&ei=TtbzT6aWDMHdmAX3q_iYBQ&usg=AFQjCNGYnLVF6gyguAh65nIoCI95U6VRGQ Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
Niigata.pm 2012/07/04 14:36:47 210.196.92.162 http://park15.wakwak.com/~k-lovely/cgi-bin/wiki/wiki.cgi?page=memo Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)
Niigata.pm 2012/07/04 14:37:22 125.200.79.43 http://park15.wakwak.com/~k-lovely/cgi-bin/wiki/wiki.cgi?page=JSON Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/534.55.3 (KHTML, like Gecko) Version/5.1.5 Safari/534.55.3
  • エラーログをデコードする
tail -f /var/log/httpd/error_log|perl -ple 's/\\x(..)/pack("C",hex($1))/ge'

特定のフィールドでソートする

ブランクで区切られている4番目の項目でソートする

perl -e 'print sort{(split(/ /,$a))[3] <=> (split(/ /,$b))[3]} <>' log.txt

漢字コードを変換する

utf8で書かれているテキストをeucに変換する。

perl -i.bak -MJcode -ple 'Jcode::convert(\$_,"euc","utf8")' log2.txt [file2 file3 ... ]

スイッチ(1行野郎の為のオプションスイッチ)

  • -e commandline
    • 1行野郎の必須オプション コマンドライン(スクリプト)が実行される
  • -n
    • スクリプトのまわりをループで囲んでくれる
LINE:
while(<>){
    スクリプト    #-eで与えたスクリプトがここ置かれる
}
  • -p
    • -nのprint付き ループの最後のprintしてくれる
LINE:
while(<>){
    スクリプト    #-eで与えたスクリプトがここ置かれる
    print;
}
  • -a
    • -n,-pと一緒に使うことでループの先頭でsplitが実行され、@F配列に各要素がセットされる
LINE:
while(<>){
    @F = split(' ');
    スクリプト    #-eで与えたスクリプトがここ置かれる
}
  • -l
    • 自動的に行末処理を行う。ループの先頭でchompを行いprintの最後に$\出力する
  • -i
    • 処理結果を元のファイルに書き戻す。入力ファイルを別名にリネームしprintの出力先を元のファイルにする。-i.bakと拡張子を指定すれば元のファイルは.bakの拡張子が付加されバックアップファイルになる
  • -Mmodule
    • スクリプトを実行する前にuse moduleを実行する。-Mのおかげで1行野郎は複雑な処理も1行で書けてしまう
  • 2016/04/07 追加 マルチラインの置き換え
    • xmlの特定のタグの中にタグを追加する(もし追加するタグがあったら書き換える)
perl -i.back -0pe 's{(<PropertyGroup Condition.*?(?:Debug|Release).*?)(\s*<PlatformTarget>[^<]*</PlatformTarget>)*(\s*</PropertyGroup>)}{$1\r\n    <PlatformTarget>x86</PlatformTarget>$3}gms' */*/*vbproj
    • -0 セパレータの指定
    • m マルチライン
    • s .を改行とマッチさせる

□□□□ One-Liner google serch □□□□

決起大会

  • 初めての参加を歓迎して誘っていただいたしんぺいさんのページ
  • uzullaさんが写真を沢山のせてくれています
  • ishiducaさんがLTのメモをまとめてくれています
  • jewelさん

ATNDで参加するためにTwitterを始めました。

新潟でperlの仕事がした〜い!!!