ablog

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

Perl

iostat の出力結果を特定の列でソートする Perl ワンライナー

% perl -lane '/^sdk/ and push(@tmp,[@F]);END{map{print join(qq/ /,@{$_})}sort{$a->[11]<=>$b->[11]}@tmp}' iostat.log この例では、デバイスを sdk だけに絞って、%util(11列目) でソートしています。 動的に二次元配列を作る方法は以下を参考にしまし…

CPAN モジュールのバージョンを調べる

毎回忘れてぐぐってるのでメモしとく。 $ perl -MEncode -le 'print $Encode::VERSION' 2.35

1秒未満のスリープ

while : do date ls -l # 0.5 秒 sleep する perl -e 'select(undef, undef, undef, 0.5);' done 参考 perl には2種類の select がある - kameidの備忘録 - Sharpen the Saw! 追記(2011/06/29): use Time::HiRes; auryo はてなブックマーク - 1秒未満のスリ…

10進数を2進数に変換する Perl ワンライナー

$ perl -le 'print unpack(q/B8/,pack(q/C/,4))' 00000100

リスナー・ログから接続元IPアドレス毎に接続要求回数を集計する Perl ワンライナー

perl -nle 'if(/(\d{2}-\w{3}-\d{4} \d{2}:\d{2}:\d{2}).*CONNECT_DATA.*HOST=([\w\-\.]+).*HOST=([\w\-\.]+)/i){$h->{qq/$2,$3/}->{count}++;$h->{qq/$2,$3/}->{date}=$1}; END{map{print qq/$_,$h->{$_}->{count},$h->{$_}->{date}/} keys %$h}' listener.…

find + xargs + Perl ワンライナーでシェルスクリプトのシェバンの次の行に1行追加する

こんなふうに一括置換して、 % find . -type f -name '*.sh' -print0|xargs -0 perl -i.org -0777 -pe 's/(\s*#![\w\s\/]+\/bash)/$1\nexport LANG=C\n/' シェバンを表す正規表現に「\s」を含んでいるのはわざとです。こんなふうに確認すればいいかな。 % fi…

Perlワンライナーでファイル名一括置換する(3)

% perl -0777 -ne '$o=$ARGV;$ARGV=~s/\w+\-(\d+\.png)$/oas902_install_$1/;rename($o,$ARGV)' *.png 関連 Perl ワンライナーでファイル名一括置換 - ablog Perlワンライナーでファイル名一括置換する(2) - ablog

ファイル中の2つ以上の空白文字を1つに変換する Perl ワンライナー

書き方 $ perl -i.org -ple 's/\s+/ /g' <ファイルパス> 実行例 $ cat <<EOF >foo.lst 1 neo male 2 trinity female 3 oracle female EOF $ perl -i.org -ple 's/\s+/ /g' foo.lst $ cat foo.lst 1 neo male 2 trinity female 3 oracle female</eof>

2つ以上の空白文字は1つにするがシングルクオートで囲まれたリテラルは無視する Perl ワンライナー

@yoheia つ s/\G(('[^']*'[^']*?)*[^']*?)[ ]+/$1 /g Twitter. It's what's happening. Perl ワンライナーで試してみると、 % cat foo.c select ' ','a bc' from emp where ename='a '; % perl -pe 's/\G((\x27[^\x27]*\x27[^\x27]*?)*[^\x27]*?)[ ]+/$1 /g'…

ディスク使用率推移をPerlワンライナー

大量のファイル(df コマンドの実行結果)からディスク使用率の推移を出力する Perl ワンライナー。 find . -type f -print0|xargs -0 perl -lane '($d,$t)=$ARGV=~/([0-9]{8})([0-9]{4})$/;$t==q/0000/ and print qq/$F[5]\t$d\t$t\t$F[1]\t$F[2]\t$F[3]/'|…

行頭が「*」で始まらない場合、行頭に「**」を追加する Perl ワンライナー

行頭が「*」で始まらない場合、もしくは、空行でない場合に、行頭に「**」を追加する Perl ワンライナー。 perl -nle '/^\*|^\s*$/ or s/^/\*\*/;print' hoge.txt

時刻の差を求める Perl ワンライナー

% perl -MTime::Local -le 'print ((timelocal(0,0,23,1,1,2000)-timelocal(0,30,8,,1,1,2000))/(60*60))' 14.5 コマンドラインでもっと楽に計算できそうな気がする。。。

ASCIIコードを文字に変換する Perl ワンライナー

ASCIIコードが10進数の場合 $ perl -e 'map{print chr($_)} @ARGV' 112 101 114 108 perl ASCIIコードが16進数の場合 $ perl -e 'map{print chr(hex($_))} @ARGV' 70 65 72 6C perl 参考 chr関数 - 数値をASCIIに変換 - Perlゼミ(サンプルコードPerl入門)

Text::CSV を使ってみる

Text::CSV をインストールする。 $ /usr/local/bin/cpanm -f Text::CSV text_csv_sample.pl #!/usr/bin/env perl use strict; use warnings; use Text::CSV; my $tc = Text::CSV->new; while(<>){ next unless $tc->parse($_); my @fields = $tc->fields; pr…

Text::Balanced を使ってみる

Text::Balanced をインストールする。 bash-3.2$ /usr/local/bin/cpanm -f Text::Balanced --> Working on Text::Balanced Fetching http://search.cpan.org/CPAN/authors/id/A/AD/ADAMK/Text-Balanced-2.02.tar.gz ... OK Configuring Text-Balanced-2.02 .…

Parse and extract specified elements from source-code written in the C language ...

http://cpansearch.perl.org/src/TIMB/Java-2Perl6API-0.11/lib/Java/Javap/Grammar.pm http://cpansearch.perl.org/src/DCONWAY/Parse-RecDescent-1.965001/demo/demo_another_Cgrammar.pl

Parse::RecDescent を使ってみる

cpanminus をインストールする。 bash-3.2$ git clone git://github.com/miyagawa/cpanminus.git Cloning into cpanminus... remote: Counting objects: 3355, done. remote: Compressing objects: 100% (1284/1284), done. remote: Total 3355 (delta 1646)…

テキストファイルの全ての行をカンマで繋げるPerlワンライナー

私のお気に入り「テキストファイルの全ての行をカンマで繋げる sed スクリプト」: $ sed ':;N;s/\n/,/;b' 〇〇.txt (たった14文字だけで、他の言語の if文・while 文・文字列置換を表せるのだ) Twitter. It's what's happening. これは短い。 ちょっとやって…

Linux で TCP 接続しているリモートホストのIPアドレス・ポート番号・ソケットのinode番号を表示する Perl ワンライナー

perl -lane '$F[2]=~/(..)(..)(..)(..):(....)$/;printf qq/ip:%d.%d.%d.%d port:%d inode:%d\n/, map hex, $4,$3,$2,$1,$5,$F[9]' /proc/net/tcp6 実行してみるとこんな感じ。 $ perl -lane '$F[2]=~/(..)(..)(..)(..):(....)$/;printf qq/ip:%d.%d.%d.%d p…

あるディレクトリ以下の CSV ファイルをコンカチして最初の列にファイル名を入れる Perl ワンライナー

テストデータを作って、 yoheia% for i in {1..10} for% do for% perl -le 'print join(q/,/,(1..10))' >`printf "%02d" $i`.tsv for% done yoheia% ls 01.tsv 02.tsv 03.tsv 04.tsv 05.tsv 06.tsv 07.tsv 08.tsv 09.tsv 10.tsv yoheia% cat * 1,2,3,4,5,6,7…

コード対応表から Perl ワンライナーでファイル対応表を生成してそれらのファイル diff をとってみた

perl -F, -lane '$F[4]=~s/(^"|"$)//g;print qq/ro\/CD000001$F[0]201003.dat rs\/201003_$F[4].dat/' list.csv|while read LINE;do diff -q $LINE;done

fswiki からはてなに移行したときに使った Perl ワンライナー

yoheia% curl 'http://yohei-a.fswiki.com/wiki/Oracle+11g+RAC%B9%BD%C3%DB%BC%EA%BD%E7&action=SOURCE' > wiki.txt yoheia% perl -pe 's/^\s*$//g;s/^\*\*\*/---/g;s/^\*\*/--/g;s/^\*/-/;s/^!!!/\*\*/g;s/^!!/\*\*\*/g;if(/^\s/ and $b==0){print qq/\n>|…

空行を削除する Perl ワンライナー

perl -i.org -ne '/^\s*$/ or print' test.sql 関連 コメント行と空行を削除する - ablog Perlワンライナーでレコードセパレータを変更する - ablog

ack -- better than grep, a power search tool for programmers

Beyond grep: ack 2.24, a source code search tool for programmers ack は Perl 製の grep ツールで、grep より便利らしい。 #catalyst でちょっと話題になっていた ack をいれてみた。CPAN シェルから install App::Ack とするだけ。基本的には grep -r |…

Perl で例外処理

Web::Scraper の filter が便利 - ablog のコードを実行したら、 Error GETing http://... Internal Server Error at ./bar.pl line 50という具合に、Internal Server Error が発生するページがあって、そこで異常終了してしまった。 Perlゼミ(サンプルコー…

Java アプリケーションのログから発生した Exception の回数を集計する Perl ワンライナー

perl -wnle 'BEGIN{%h=();}/([a-zA-Z]*Exception)/ and $h{$1}++;END{map{print "$_:$h{$_}"} sort keys %h;}' * 実行結果 ... ConversionException:2 Exception:2 FileUploadException:2 IOException:674 IllegalArgumentException:10 IllegalStateExceptio…

Web::Scraper を使う時に YAML::Dump でデバッグする

Web::Scraper を使う時は YAML::Dump でデバッグすると便利ですね。 別に Web::Scraper を使う時に限らないですね。YAML::Dump は便利ですね。 scrape_twitter.pl #!/usr/bin/perl use strict; use warnings; use URI; use Web::Scraper; use Encode; use YA…

WWW::Mechanize::AutoPager + Web::Scraper で HTML からテキストを抽出して CSV を作成してみた

やりたいこと Webアプリにログインする。 検索ページに移動する。 検索ボタンを押下する。 検索結果一覧から詳細ページに移動、テキストを抽出してCSVファイルに書込む。 次のページに移動して、同じことを繰り返す。 次のページがなくなったら終了する。 ソ…

WWW::Mechanize::AutoPager を使ってみた

WWW::Mechanize::AutoPager を使ってみた。 コードは WWW::Mechanize::AutoPager - Automatic Pagination using AutoPagerize - metacpan.org からほぼコピペ。 autopager_tumblr.pl #!/usr/bin/perl use WWW::Mechanize; use WWW::Mechanize::AutoPager; us…

HTML::AutoPagerize を使ってみた

HTML::AutoPagerize を使ってみた。 コードは HTML::AutoPagerize - Utility to load AutoPagerize SITEINFO stuff - metacpan.org からほぼコピペ。 autopagerize_tumblr.pl #!/usr/bin/perl use HTML::AutoPagerize; use LWP::Simple; my $autopager = HTM…