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

スクリプトを作った経緯

作業フォルダ内にdigコマンドの結果を出力したテキストファイル(拡張子log)がたくさんある状況で、それぞれのファイル内のdigクエリとレスポンスを(必要な文字列だけを抜き取って)一つのテキストファイルにまとめたかった。

抽出する文字列

以下のようなパターンの行を抽出して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;
}

内容はまぁまぁ雑なので、もっと簡略化できると思う。

Leave a Comment