perl解析日誌檔案並插入資料庫

2021-06-11 23:52:51 字數 4214 閱讀 6524

本程式用到幾個自己寫的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...