命令行:监视日志文件并将数据添加到数据库

时间:2012-05-29 14:19:47

标签: 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       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脚本会在每次附加文件时获取数据吗?

非常感谢,

2 个答案:

答案 0 :(得分:2)

bash中的另一种方法:

#!/usr/bin/perl -w

use strict;

$|++; # unbuffer output

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

while (<FH>) { 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

答案 1 :(得分:1)

如果这是您想要采用的方法,则需要一个管道,例如:

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

其中myPerlScript.pl读取传入的行,如:

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

}