keima's caprice diary

気付いたことをメモのように綴ります。なるべく義務っぽくならないように気まぐれに記録します。

dig要求と応答を抽出するperlスクリプト

作業フォルダ内にdigコマンドを実行しまくったテラタームログ(拡張子log)ファイルがたくさんあって、コマンドを実行した際のクエリとレスポンスをまとめる作業に便利かと思って作成した。

以下のようなパターンの行を抽出してresult.txtに書き出す。

[root@root ~]# dig @localhost yahoo.com
;; QUESTION SECTION:
(クエリパターン)
;; ANSWER SECTION:
(dig結果)

#! /bin/perl -w
use warnings;
use strict;
# 変数初期化
my @filename = ();
my $filen;
my $bkupfile;
my @array = ();
my $flag = '0';
# ファイル名を配列保存
while(glob "*.log"){push(@filename, "$_");}
# ファイル名をスカラ保存
# 最下部でループ処理クローズ。
while($filen = shift(@filename)){
open(READ,"< $filen");open(OUT,"> ./result.txt");
# 各行を配列保存
while(<READ>){
push(@array, $_);
}
close(READ);
# パターンマッチ抽出
# マッチしたらフラグを立てる
while(my $line = shift @array){
if($line =~ /dig/){print OUT $line;}
if($line =~ /QUESTION SECTION/){print OUT $line;$flag = '2';}
elsif($line =~ /ANSWER SECTION/){print OUT $line;$flag = '1';}
elsif($flag == '1' or $flag == '2'){if($line =~ /^\n$/){$flag = '0';next;}else{print OUT $line;}
}
}
close OUT;
}