ablog

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

Perl

Perl ワンライナーにシェル変数を渡す

Perl ワンライナーでシェル変数を渡すには -s オプションを使えばよい。 書式 perl -se '...' -- -Perlで使う変数名=シェル変数名 実行例 $ FOO=bar; perl -sle 'print $var' -- -var=$FOO bar 参考 sオプションを使います echo -e "hogehoge\nfugafuga" > m…

Perlワンライナー集

障害対応でのログ解析、ソースコードの調査といったテキスト処理で使った Perl ワンライナー集です。 マルチライナーやいけてないのもありますw Perl ワンライナーの好きなところ Perl は Oracle Database (10g以降) に同梱されているので、Windows プラット…

最近使った Perl ワンライナーのメモ

perl -lane '$F[2]=~s/^([a-z]+).*/$1/; $h->{$F[1]}->{$F[2]}++;END{map{$t=$_ and print $t;map{print qq/$t\t$_\t$h->{$t}->{$_}/} keys %{$h->{$_}}} keys %$h}'' strace.loggrep -hA 20 '^top -' top.logperl -lane '/top - ([\d:]+)/ and $t=$1;$F[0]=…

10進数からの16進数 変換 Perl ワンライナー

16進数から10進数に変換 perl -e 'map{print hex($_)} @ARGV' 4a98 10進数から16進数に変換 perl -e 'printf qq/%X/, 19096'

中途半端にCPU使用率を上げるPerlワンライナー

$ perl -MTime::HiRes -e 'while(1){for(1..10000){};Time::HiRes::sleep(0.0001)}' 参考 CPU使用率を 100% にする Perl ワンライナー - ablog

Perlスクリプトから sudo でコマンドを実行する

事象 Perl スクリプトから sudo で xentop を実行したら、 @xentopout = `/usr/bin/sudo /usr/sbin/xentop -bf -i 2 -d 2 2>&1`; 以下の通り怒られた。 sudo: sorry, you must have a tty to run sudo 対処方法 visudo で /etc/sudoers の"Defaults requiret…

ソースコード検索ツール ack を使ってみた

ソースコード検索ツール ack の存在を知ったのは4年位前だけど、今更使ってみた。*1 インストール # yum install ack 使ってみる 良い感じ。 参考 ack使い方メモ - アルパカDiary Pro *1:grepやackよりも速いコード検索ツールのagをローカルビルドインストー…

ls のソースを読んでプログラマになりました

タイトルは釣りですw*1とあるテキストファイルを加工してCSVファイルを出力する Perl スクリプトがあり、ディレクトリ内のファイルをリストアップしてCSVファイルに出力しているのだが、なぜファイル名でソートされていないのか聞かれたので調べてみた。その…

2行にまたがっている iostat のログを1行にするのに使ったPerlワンライナー

% perl -pe '/sssn[0-9]+s:/ and chop' iostat.txt > iostat_tmp.txt % perl -pe 's/(sssn[0-9]+s:[\/\w]+)iostat\s[0-9\/]{10}\s[0-9:]{8}/$1/' iostat_tmp.txt > iostat_mod.txt

Perlで標準出力でバッファリングしないようにする

Perlで出力のバッファリングを無効にするにはてっどさんからのネタで、てっどさんが自力で解決した話ですけど(笑)、勉強になったのでメモ。^^;Perlの標準出力はバッファリングされてます。改行「\n」を出力すれば標準出力に出力されますけども、「\n」を出さ…

Can't locate object method "ssl_opts" via package "WWW::Mechanize"

WWW::Mechanize で SSL を使うときに、継承している LWP::UserAgent の ssl_opts メソッドで証明書のパスを指定しようとしたら以下のように「Can't locate object method "ssl_opts" via package "WWW::Mechanize"」と怒られた。 ssl_test1.pl #!/usr/bin/en…

SJISのWebページをスクレイピングしてCSVに保存すると文字化けする

WWW::Mechanize や Web::Scraper を使って Shift-JIS のWebページをスクレイピングして CSV に保存しようとすると、「Wide character in print at ...」とエラーメッセージが出力されて文字化けするので、【Perl 文字化け解決】Wide character in print atと…

WWW::Scraper で JavaScript を使ったWebサイトへのアクセスを自動化する

Perl で WWW::Mechanize や Web::Scraper を使ってWebサイトをスクレイピングしたことはあるが、画面遷移に JavaScript を使っている場合、どうすればよいか調べてみた。 例えば以下のように JavaScript を使ってリンクしている場合。 <a href="javaScript:next(2)">次へ</a> WWW::Scripter と…

CSVのカンマの前後のスペースを除去する Perl ワンライナー

フジモンから sed でどうするのって質問来たが、Perl で回答。 % FOO=' ,4078387448 , 53745,files, yohei happy , aaa' % echo $FOO|perl -ple 's/\s+,/,/g;s/,\s+/,/g' ,4078387448,53745,files,yohei happy,aaa

form の hidden をスクレイピングしたメモ

#!/usr/bin/env perl use strict; use warnings; use WWW::Mechanize; use Web::Scraper; my $mech = 'WWW::Mechanize'->new('autocheck', 1, agent =>'Mozilla/5.0'); $mech->get('https://...'); my $scraper = scraper { process '/html/body/form/input[…

top の出力結果を記録したログから buffers の値を抽出してソートする Perl ワンライナー

コマンド perl -ne '/^top\s-\s([\d:]+)/ and print $1;/(\d+k)\sbuffers/ and print qq/ $1\n/' top.log|sort -k2 -n sort コマンドも使ってます 出力結果例 01:20:43 31425k 01:20:53 31513k 01:16:40 31567k 01:16:51 31615k

iostat の出力結果から特定のデバイスでビジー率が高い行だけ抽出する Perl ワンライナー

perl -lane '/^(時間:.*)/ and $t=$1;/^sda/ and $F[13] > 90 and print qq/$t $_/' iostat.log

Solaris で stat コマンドの代わりに使う Perl ワンライナー

perl -e '@stats=stat($ARGV[0]);map{($s,$m,$h,$d,$mon,$y)=localtime($_);printf(qq/%04d-%02d-%02d %02d:%02d:%02d\n/,$y+1900,$mon+1,$d,$h,$m,$s)} @stats[8,9,10]' README.TXT 参考 指定した日に更新されたファイルを探す - 合理的な混沌

再帰的にファイル内の文字列を置換するPerlスクリプト

Windows で Cygwin などが入ってなくて、find とか xargs とかない場合に使う Perl スクリプトを書いてみた。 #!/usr/bin/env perl use strict; use warnings; use File::Find; use File::Basename; &print_usage if ($#ARGV < 0); find(\&process, $ARGV[0]…

Perl ワンライナーで遊んだメモ

シリアル % echo 'To be or not to be, that is the question'| perl -lane 'map{s/,//g;$hash{lc($_)}++} @F;foreach(keys %hash){print qq/$_:$hash{$_}/}' the:1 that:1 not:1 is:1 question:1 to:2 or:1 be:2 map だけパラレル? % echo 'To be or not to…

perl-beginners #1 に行ってきた

perl-beginners #1 (http://www.perl-beginners.org/2012/01/perl-beginners-1_17.html) に行ってきた。遅刻してしまったけど。 今のところ、perl-beginnersでは以下のようなことをやりたいなーと考えています。perl及び周辺技術/ノウハウについての質問会一…

vmstat の出力結果を整形する Perl ワンライナー

2011-10-14 04:05:01 procs memory page faults cpu r b w avm free re at pi po fr de sr in sy cs us sy id 2 0 0 535206 3325748 0 0 0 0 0 0 0 2043 5411 125 0 5 95 4 0 0 535206 3324971 0 0 0 0 0 0 0 3810 2980 234 0 6 94 2011-10-14 04:06:01 proc…

Perl で変数を使ってファイルハンドル名を動的に生成する

こんな感じでできたのでメモ。 ソースコード filehandle.pl #!/usr/bin/env perl use strict; use warnings; my @array = (1,2,3,4,5,6,7,8,9,10); foreach my $item (@array) { no strict "refs"; my $fh = "OUT${item}"; open (${$fh}, ">", "${item}.txt"…

Perl の grep sort map とか

Perlクックブック〈VOLUME1〉作者: トムクリスチャンセン,ネイザントーキントン,Tom Christiansen,Nathan Torkington,Shibuya Perl Mongers,ドキュメントシステム出版社/メーカー: オライリージャパン発売日: 2004/09/01メディア: 単行本購入: 1人 クリック:…

String found where operator expected at ... (Missing operator before ...?)

String found where operator expected at ./status_log_spliter.pl line 109, near "} "$line\n"" (Missing operator before "$line\n"?) ある Perl スクリプトを実行すると、実行はできるけど「String found where operator expected」と怒られるので、 pr…

アクティブセッション数と statspack レポートの集計処理に使った Perl ワンライナー

こんにちは、コードゴルフ界の飛ばし屋ですw*1 自分用のメモです。アクティブセッション数の集計に使ったもの。レコードセパレータを段落に、フィールドセパレータを改行にしています。 perl -00 -F'\n' -lane '$sum=0;map{@line=split(q/,/,$_);$sum+=$line…

Perl スクリプトをデバッグする方法

久しぶりに Perl スクリプトをデバッグしたのでメモ。 デバッガを使う % perl -d hoge.pl DB<1> h List/search source lines: Control script execution: l [ln|sub] List source code T Stack trace - or . List previous/current line s [expr] Single ste…

Perl の特殊変数で $/ ってなんだっけ?

% perldoc perl ... Reference Manual ... perlvar Perl predefined variables perlre Perl regular expressions, the rest of the story % perldoc perlvar $/ The input record separator, newline by default. This influences Perl's idea of what a "li…

iostat の出力結果の集計に使った Perl ワンライナー

ls *.out|xargs -n1 perl -lane 'if(/^sdk/){for($i=1;$i<=$#F;$i++){$t[$i-1]+=$F[$i]};$c++};END{print qq/$ARGV\t/.join(qq/\t/,map{sprintf(qq/%.2f/,$_/$c)}@t)}'

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列目) でソートしています。 動的に二次元配列を作る方法は以下を参考にしまし…