Shell脚本从日志文件中读取并更新到Oracle DB表

时间:2018-05-19 18:02:25

标签: oracle shell awk splunk

我需要为某些参数读取splunk日志文件,并在找到这些参数后使用该数据更新Oracle 11g数据库表。

例如

Splunk日志文件名为: app.log

日志文件中的输入参数为:

[timestamp] amount=100,name=xyz,time=19 May 2018 13:45 PM
shell脚本的

输出应该是:应该将数量读入变量,并且应该为其分配100。该值100应存储在Oracle的DB表中。

我可能必须使用awk脚本。由于我是shell脚本的新手,我对此并不了解。

tail -f|egrep -wi 'amount' /apps/JBoss/log/app.log 

这种类型的命令似乎无法正常工作。

3 个答案:

答案 0 :(得分:1)

您可以使用Perl的正则表达式轻松捕获此类值。

a = [[0]*3]*4
for i in range(4):
    a[i] = [i, 2*i, 3*i]

如果要使用纯shell命令,

amt=$(perl -pe 's/^amount=(\d+).*/$1/' /apps/JBoss/log/app.log)

您可以在amt=$(grep amount app.log| cut -f1 -d',' | cut -f2 -d '=')

insert查询中使用此变量
sqlplus

答案 1 :(得分:0)

答案 2 :(得分:0)

对于输入文件(app.log),例如:

[timestamp] amount=100,name=xyz,time=19 May 2018 13:45 PM                
[timestamp] amount=150,name=xyz,time=19 May 2018 13:45 PM                
[timestamp] amount=200,name=xyz,time=19 May 2018 13:45 PM                

你可以使用grep的P标志(PCRE):

arr=($(grep -oP "(?<=amount=)\d+" app.log))

这会将amount的值存储在数组arr中。输出:

echo ${arr[@]}
100 150 200