2012-05-29 71 views
0

我在監視日誌文件。每一行的格式如下:命令行:監視日誌文件並將數據添加到數據庫

2012 5  29  14  20    438.815 872.737 -1.89976  -0.55156  8.68749 -0.497848  -0.54559    0  0  6  00  0  0  0    0  0  0  0  0  80  9    0  0  10  0  0  0  8  00  9  0  0  0  0  0  0    2  41  84  0  0  0  1  0 

正如你所看到的,每個值由製表符分隔。

我該如何編寫一個Perl腳本來獲取每一行新數據(日誌文件每十分鐘更新一次)並將這些數據插入MySQL數據庫?

我想盡可能在​​命令行上做到這一點。

如果我做tail -f -n 1 ./Eamorr.out > myPerlScript.pl,我的perl腳本每次將文件附加到數據時都會獲取數據?

提前許多感謝,

+0

是否必須使用Perl?你也可以使用shell腳本,以及你的數據庫命令行客戶端(mysql,psql等)來做到這一點。 – ghoti

回答

2

bash的另一個問題:

#!/usr/bin/perl -w 

use strict; 

$|++; # unbuffer output 

open FH, "tail -f /var/log/syslog |"; 

while (<FH>) { chomp; print; } 

沒有Perl的純殼:

tail -f /var/log/syslog | 
    while read a; do 
     echo "INSERT INTO FOOBAR VALUES($(
      sed "s/ /','/g; s/^/'/; s/$/'/" <<< "$a") 
     );" 
    done 
+0

完美地工作。非常感謝! – Eamorr

+0

不客氣Eamorr =) –

+1

請參考我編輯的POST中殼牌示例 –

1

如果這是你要採取的方法,你需要一個管道,如:

tail -f -n 1 ./Eamorr.out | myPerlScript.pl 

其中myPerlScript.pl讀取輸入線,如:

while (<>) { 
chomp; 
print "Handling: $_\n"; 

}