2012-05-29 2 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? Вы также можете сделать это, используя только сценарий оболочки, вместе с клиентом командной строки базы данных (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 для примера в SHELL –

1

Если это подход вы хотите взять, вам нужен трубопровод, как:

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

где myPerlScript.pl читает входящие строки:

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

}