はじめに
運用でログを調査したりデータを整形したりするときに使うperlのtipsです。
ワンライナーTSVを扱う
perl -F'\t' -nale 'print "$F[0]\t$F[1]"' input.tsv
tsvからsqlファイルを生成する
create_sql.pl
#!/usr/bin/perl
while(<>) {
chomp;
@c=split /\t/;
print <<"EOS"
select val_1
||chr(9)||val_2
from table_a
where col_a=$c[1]
and col_b=$c[2]
/
EOS
}
コマンド実行例
# ./create_sql.pl input.tsv > output.sql
2つのファイルを結合する
merge.pl
#!/usr/bin/perl
# 第2引数のファイルをハッシュに詰める
%hash;
open(IN,"$ARGV[1]");
while(<IN>) {
chomp;
@c=split /\t/;
$key=$c[0]."_".$c[1]; # キーとなる列をアンスコでつなげてハッシュに入れる
$hash{$key}=$_;
}
close(IN);
# 第1引数のファイルを第2引数のファイル内容を詰めたハッシュと突合して出力
open(IN2,"$ARGV[0]");
while(<IN2>) {
chomp;
@c=split /\t/;
$key=$c[3]."_".$c[5]; # キーとなる列をアンスコでつなげてハッシュに入れる
print $_;
if (exists($hash{$key})){
print "\t";
print $hash{$key};
}
print "\n";
}
close(IN2);