Linux 命令行:监视日志文件并将数据添加到数据库
我正在监视一个日志文件。每行的格式如下:Linux 命令行:监视日志文件并将数据添加到数据库,linux,perl,unix,command-line,tail,Linux,Perl,Unix,Command Line,Tail,我正在监视一个日志文件。每行的格式如下: 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
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-n1./Eamorr.out>myPerlScript.pl
,我的perl脚本会在每次附加文件时获取数据吗
提前多谢,如果这是您想要采取的方法,您需要一个管道,如:
tail -f -n 1 ./Eamorr.out | myPerlScript.pl
其中myPerlScript.pl
读取的输入行如下所示:
while (<>) {
chomp;
print "Handling: $_\n";
while(){
咀嚼;
打印“处理:$\n”;
}如果这是您想要采取的方法,您需要一个管道,如:
tail -f -n 1 ./Eamorr.out | myPerlScript.pl
其中myPerlScript.pl
读取的输入行如下所示:
while (<>) {
chomp;
print "Handling: $_\n";
while(){
咀嚼;
打印“处理:$\n”;
}bash中的另一个问题:
#!/usr/bin/perl -w
use strict;
$|++; # unbuffer output
open FH, "tail -f /var/log/syslog |";
while (<FH>) { chomp; print; }
#/usr/bin/perl-w
严格使用;
$|++; # 无缓冲输出
打开FH,“tail-f/var/log/syslog |”;
while(){chomp;print;}
如果纯shell中没有Perl:
tail -f /var/log/syslog |
while read a; do
echo "INSERT INTO FOOBAR VALUES($(
sed "s/ /','/g; s/^/'/; s/$/'/" <<< "$a")
);"
done
tail-f/var/log/syslog|
边读边读;做
echo“插入到FOOBAR值中($(
sed“s//”,“/g;s/^/”;s/$/'/”bash中的另一个方法:
#!/usr/bin/perl -w
use strict;
$|++; # unbuffer output
open FH, "tail -f /var/log/syslog |";
while (<FH>) { chomp; print; }
!/usr/bin/perl-w
严格使用;
$|+++#解除缓冲输出
打开FH,“tail-f/var/log/syslog |”;
while(){chomp;print;}
如果纯shell中没有Perl:
tail -f /var/log/syslog |
while read a; do
echo "INSERT INTO FOOBAR VALUES($(
sed "s/ /','/g; s/^/'/; s/$/'/" <<< "$a")
);"
done
tail-f/var/log/syslog|
读一本书的时候;做一件事
echo“插入到FOOBAR值中($(
sed“s//”,“/g;s/^/”/;s/$/”非常好用。非常感谢!我建议使用tail-F
而不是-F
,以防日志文件旋转…非常好用。非常感谢!我建议使用tail-F
而不是-F
,以防日志文件旋转…它必须是perl吗?您也可以使用一个shell脚本,以及您的数据库命令行客户端(mysql、psql等)。它必须是perl吗?您也可以使用一个shell脚本,以及您的数据库命令行客户端(mysql、psql等)来实现这一点。