ablog

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

Perl

テキストファイルから特定の行だけ抽出する Perl ワンライナー

% perl -le 'print for 1..1000' > hoge.txt % perl -wne 'print if 1..200' hoge.txt > hoge1-200.txt % perl -wne 'print if 201..250' hoge.txt > hoge201-250.txt % wc -l * 1000 hoge.txt 200 hoge1-200.txt 50 hoge201-250.txt 1250 total [関連] spli…

変態的な Perl ワンライナー

id:sugyan さんにトラックバックされた。 変態的に書きたいときはこんなカンジでw perl -pe '$\=$_}{' hoge.log 最終行だけ表示するPerlワンライナー - すぎゃーんメモ ちょっと何書いてるのか理解できないですね(汗 % perl -le 'print for(1..10)' > hoge…

プロセスをまとめて kill する Perl ワンライナー

foo.shとbar.shを実行して、 % ls bar.sh foo.sh % ./foo.sh & % ./bar.sh & % jobs [1] - running ./foo.sh [2] + running ./bar.sh kill す。 % ps -ef|perl -lane '/(foo|bar)\.sh/ and kill(SIGKILL, $F[1])' [1] - killed ./foo.sh [2] + killed ./bar.…

Perl ワンライナーでカスタムフィールドセパレータを使う

例えば1つ以上の空行をレコードセパレータ、改行をフィールドセパレータとしたい場合以下のようにする。hoge.txt があって、 % cat hoge.txt name:smith age:40 gender:male name:neo age:30 gender:male name:trinity age:28 gender:female 1フィールド目に…

正規表現でマッチした文字列の次の一行を取得する Perl ワンライナー

こんなファイルを作って、 % cat hoge.txt aaaline1bbb line2 cccc line1 aaa bbbb line2 cccc ワンライナーを実行してみる。 % perl -0777 -pe 's/.*line1.*\n(.*?)\n/$1/g' hoge.txt line2 cccc line2 cccc スクリプト化するとこんなコードになる。 % perl…

FQDN からドメイン名を取得する Perl ワンライナー

% echo w.w.w.google.co.jp|perl -pwe 's/.*\.([a-zA-Z0-9\-]+\.)(com|co\.jp|ne\.jp)/$1$2/' google.co.jp

最終行だけ表示する Perl ワンライナー

最後の行だけ表示する。 perl -wnle 'eof and print' hoge.log 最初と最後の行だけ表示する。 perl -wnle 'print if($.==1 or eof)' hoge.log 複数ファイルの最初と最後の行だけ表示する。 perl -wnle 'print if($.==1 or eof);eof and close ARGV' *.log […

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

Shift_JIS から EUC-JP に変換する。 perl -i.org -MEncode -pe 'Encode::from_to($_,"shiftjis","euc-jp");' hoge.txt 改行コードも CRLF から LF に変換する場合。 perl -i.org -MEncode -pe 's/\r\n/\n/g;Encode::from_to($_,"shiftjis","euc-jp");' hoge…

飛び番を探す Perl ワンライナー

$ cat hoge.tsv HG00001 2009/08/10 ... HG00002 2009/08/10 ... ... HG00024 2009/08/10 ... HG00026 2009/08/10 ... みたいなデータがあったとして、1列目の数値部分が連続していない箇所を探す Perl ワンライナー。 $ perl -lane 'BEGIN{%h=();$b=0;}$h{s…

Getopt::Std を使ってコマンドライン引数を処理してみた

getopt.pl #!/usr/bin/env perl use strict; use warnings; use Getopt::Std; my %opt; # 記号の後に「:」をつけるとオプション引数が取れる。「:」をつけないと「1」が取れる。 getopts("ali:o:" => \%opt); map{print "$_: $opt{$_}\n"} keys %opt; __END_…

Perl でミリ秒単位の計算をする

レスポンスタイムをログの処理開始時と終了時のタイムスタンプを比較して算出するようなときに使うコードサンプル。 msec.pl #!/bin/perl use strict; use warnings; use Time::Local; my $begin = '2009/07/30 11:15:36.180'; my $end = '2009/07/30 11:15:…

Perl で正規表現にマッチした文字列を変数に入れる

びっくりするくらい毎回書き方を忘れるのでメモっておく。 例 perl -e '$s="hogehoge2009";($s1,$s2)=$s=~/^([a-z]+)([0-9]+)$/;print "$s1:$s2\n";' 実行結果 hogehoge:2009

1 〜 10000 まで表示するだけの Perl ワンライナー

$ perl -le 'print for 1..10000' 1 2 ... 9999 10000

縦 → 横 変換 Perl ワンライナー

レコードセパレータが1つ以上の空行で、レコード内に改行文字を1つ含むデータを1行1レコードに変換する Perl ワンライナー。元のファイル。 $ cat aaa.txt line1 line2 line1 line2 line1 line2 変換する。 $ perl -i.org -00 -pe 's/^(.*)\n(.*)\n+$/$1 $2\…

Perlワンライナーで後方参照

perl -ple "s/([0-9]{4}-[0-9]{2}-[0-9]{2} [0-9]{2}:[0-9]{2}:[0-9]{2})/TO_DATE\(\'\1\',\'YYYYY-MM-DD HH24:MI:SS\'\)/g;" hoge.csv 後方参照って $1 だと思ったけどうまくいかないので、\1 にしたたうまくいった。 パターン内で括弧を使用することで、括…

Perlワンライナーでダブルクオートをシングルクオートに置換する

「"」を「'」に置換しようとして、 perl -ple 's/\"/\'/g' hoge.csv としたら、ダメだったので、 perl -ple "s/\"/\'/g" hoge.csv としたらいけた。 ぐぐってみると、他にもやり方があるみたい。 perl -e '' の中で シングルクオートを書く bash で perl を …

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

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

/etc/passwd から useradd コマンドを生成する Perl ワンライナー

/etc/group から groupadd コマンドを生成する。 $ perl -lanF':' -e 'print "groupadd -g $F[2] $F[0]"' /etc/group groupadd -g 501 oinsatll ... /etc/passwd から useradd コマンドを作成する。 $ perl -lanF':' -e 'print "useradd -u $F[2] -g $F[3] -…

DDLの置換に使ったPerlワンライナーをメモっておく

Oracle の DDL 置換に使った Perl ワンライナー。echo ワンライナーも混じってるけどw STORAGE句のINITIALの値を変更する。 perl -i.org -ple 's/STORAGE\((\s+)?INITIAL\s+[0-9]+/STORAGE\(INITIAL 1/gi' create_table.sql オブジェクトを作成する表領域を…

YAPC

「ヤップシー」と読むのか。知らなかった。 YAPCとは - はてなキーワード

こりゃ便利だ

そんなあなたに、こんなモジュールを書いてみた。 404 Blog Not Found:perl - Dir::Tree つうのを書いてみた そんなわたしです。ありがとうございます。 ちょっと使ってみた。 404 Blog Not Found:perl - Dir::Tree つうのを書いてみた からソースコードをコ…

OracleのアラートログをローテートするPerlスクリプト

例えばディレクトリ構成はこんな感じで、 $ find /home/oracle/scripts/ -type f /home/oracle/scripts/log_rotater.pl /home/oracle/scripts/log/alert.log /home/oracle/scripts/conf/alert.conf 実行してみる。 $ perl log_rotater.pl conf/alert.conf 実…

「ORA-」メッセージをエラー番号別に集計する Perl ワンライナー

Oracle のアラートログなどに出力されている「ORA-」メッセージをエラー番号別に集計する Perl ワンライナー。 コマンド perl -wnle '/(ORA-[0-9]+)/ and print $1;' log*/* | sort | uniq -c 実行結果 15 ORA-00001 20 ORA-01400 7 ORA-12899 ...追記: Perl…

Shibuya.pm#11 に行って来た

ちょっと何言ってるかわかんなかったw。まだまだ修行が足りんわ。 弾さんのセッションが一番わかりやすかった気がする(Shibuya.pm #11:The Catcher in the INT 80h)。 lleval - run codes from your browser はすごいな。

TAKESAKOさん作のCPUが64bitロングモードで動作しているかどうかをチェックするPerlスクリプト

面白いPerlスクリプトを見つけたのでメモ。 そこで、現在のCPUが64bitロングモードで動作しているかどうかをチェックする簡単なPerlスクリプトを書いてみました。 ... #!/usr/bin/perl use DynaLoader; sub x86_sub { my ($func, $x86) = @_; if ($^O eq "li…

ちょっと使った Perl ワンライナーをメモっておく

Apache のアクセスログから特定の時間帯(14:03:21-14:03:39)のログの「年月日時分秒」と「URI」を抽出し、「年月日時分秒」、「URI」で集計して、「総アクセス数」と「1秒当りの平均アクセス数」を求める Perl ワンライナー。 % perl -lane '/14:03:21/...…

制御文字を含むファイル・ディレクトリをリネームする

AIX 上に間違って制御文字を含むディレクトリを作成してしまった。 mv ではリネームのできなかったので(知らないだけかもしれないけど)、Perl ワンライナーを使ってリネームしてみたらできた。 # uname -a AIX IBMAIX53 3 5 0008723C4C00 # mkdir .^?^?^?^?^…

ファイル名で使用可能な文字(UNIX)

UNIX において、ファイル名として使用できない文字は以下の 2つのみである。 "/" (スラッシュ。ASCII コード 0x2F) \0 (ASCII コードのゼロ) 上記以外の文字、例えば空白・タブ・各種記号 (#$%& など)・コントロールコードなどはすべて使用可能である。 用語…

改行コードを置換する Perl ワンライナー

LF → CRLF に変更する。 $ perl -i.org -pe 's/\n/\r\n/g' file [参考] http://bio-math10.biology.kyushu-u.ac.jp/~tohya/tips/file.html#newline

CSV から不要な行を除去する Perl ワンライナー

これは列数が 17 の CSV を処理する Perl ワンライナー。列数が 17 の行のみ抽出する。 perl -F, -lane 'print if($#F==17)' * > ../session_wait_20090301-0331.log