スクリプトを作った経緯
作業フォルダ内に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;
}
内容はまぁまぁ雑なので、もっと簡略化できると思う。