本程式用到幾個自己寫的perl模組
1,解析資料庫的配置檔案加密解密password的模組
use mime::base64;
sub getoraclecfg
$username =~ s/^ +//;
$username =~ s/ +$//;
$password =~ s/^ +//;
$password =~s / +$//;
$ip =~ s/^ +//;
$ip =~ s/ +$//;
$port =~ s/^ +//;
$port =~ s/ +$//;
$sid =~ s/^ +//;
$sid =~s / +$//;
$sourceip =~ s/^ +//;
$sourceip =~ s/ +$//;
$sourceport =~ s/^ +//;
$sourceport =~s / +$//;
$sourcesid =~ s/^ +//;
$sourcesid =~ s/ +$//;
$sourceusername =~ s/^ +//;
$sourceusername =~ s/ +$//;
$sourcepassword =~ s/^ +//;
$sourcepassword =~s / +$//;
$sourcetablename =~ s/^ +//;
$sourcetablename =~s / +$//;
$password=decode_base64($password);
$sourcepassword=decode_base64($sourcepassword);
return ;
}return 1;
配置檔案
[ip]16.190.252.128
[sid]bsm
[port]1521
[username]ua
[password]ua
[filelocation]e:/workspace/finallog2db/test
[basename]abcsystem_172.12.4.23_xxlog.errlog
讀取日誌檔案大小的perl模組
sub getsize
$size =~ s/^ +//;
$size =~ s/ +$//;
return ;
}return 1;
配置檔案
[size]452
程式的主體部分
use strict;
use dbi;
use posix qw(strftime);
use file::find;
use loginteface_recodesize;
use loginteface_to_db;
#資料庫相關配置檔案位置
my $filelocation = "dbinteface_to_db.cfg";
#記錄上次讀取位置的檔案
my $sizelocation = "size.cfg";
#獲取日誌檔案的位置,名稱等的配置檔案(前面的乙個部分,yyyymmdd的資料夾由程式生成)
my $loglocation = "loginteface_to_db.cfg";
#獲得oracle的配置
my $cfg = &getoraclecfg($loglocation);
my $username = $cfg->;
my $ip=$cfg->;
my $sid=$cfg->;
my $port=$cfg->;
my $password=$cfg->;
#獲得日誌檔案目錄前面固定的名稱
my $basedir = $cfg->;
#獲得日誌檔案的名稱如:abcsystem_172.12.4.23_xxlog
my $basename=$cfg->;
#獲得上次讀取檔案的位置
my $size = &getsize($sizelocation)->;
my $total = 0;
#獲取yyyymmdd這種格式的日期
my $ymd = strftime("%y%m%d", localtime(time()));
#獲得當前日期的前一天
my $bymd = strftime("%y%m%d", localtime(time()-3600*24));
#日誌檔案的完整路徑
$basedir="test/";
my $fulldir=$basedir.$ymd."/";
print"$fulldir----fulldir";
opendir (dir, "$fulldir" )or die "can not open $fulldir/n";
#讀取$fulldir目錄中的所以檔案,將檔名稱放入陣列@filelist中
#注意即使目錄是空的,也有$fulldir..和$fulldir...這個兩個元素。所以有日誌檔案,長度就是3
my @filelist = readdir dir;
#按照ascii順序排序,abcsystem_172.12.4.23_xxlog.errlog.x中1會排在2前面,abcsystem_172.12.4.23_xxlog.errlog排在abcsystem_172.12.4.23_xxlog.errlog.1前面
my @sortlist = sort@filelist;
#print scalar(@filelist); 列印@filelist的長度
#讀取日誌檔案總大小
if(@sortlist < 3)else, "$fulldir/$sortlist[2]");
}#建立連線
my $dbh=dbi->connect("dbi:oracle:host=$ip;sid=$sid;port=$port", $username, $username) or die "cannot conenct oracle11g: $dbi::errstr\n";
my $sth = $dbh->prepare($sql);
#如果本次讀取的大小大於總大小,則說明以後更換檔案了,則需要讀取舊日誌的最後一部分及新日誌的全部
if ($total<$size)
}close(file);
#開始讀取今天的日誌
open(todaylog, $todaylogfile);
while()
}}";
$sth->execute($line[0],$line[1],$line[2],$line[3],$line[4],$line[5],$line[6],$line[7]); }}
close(todaylog);
}elsif(@sortlist > 3)}}";
$sth->execute($line[0],$line[1],$line[2],$line[3],$line[4],$line[5],$line[6],$line[7]); }}
close(file);
#開始讀取今天的日誌
open(currentlog, "$fulldir/$sortlist[2]");
while()
}}";
$sth->execute($line[0],$line[1],$line[2],$line[3],$line[4],$line[5],$line[6],$line[7]); }}
close(currentlog);
}}else }}";
$sth->execute($line[0],$line[1],$line[2],$line[3],$line[4],$line[5],$line[6],$line[7]);
} } close(currentlog);
}open(size,">$sizelocation");
print size "[size]$total";
close(size);
#斷開連線
$dbh->disconnect or warn "db disconnect failed: $dbi::errstr\n";
print "disconnected from oracle databae!\n";
解析檔案並寫入檔案裡
ifndef analys h define analys h include include object.h define fgetsmax 6 1024 1024 獲取一行資料的最大值6m class object class analys object char v,int l value ...
遍歷日誌檔案並列印
error reporting e all ini set display errors 1 function load file return contents function eliminate lines new dul line return new function qsort arra...
spark 解析json檔案 並資料統計
有資料檔案如下,資料資訊代表 selecct from datardd groupby region code,gender需求 假設資料為某一天的資料,同時沒有相同的人 1 統計 性別 不同地區 的最高工資 地區性別工資a 11000a2 2000b1 3000b2 4000c1 5000c2 6...