我需要为某些参数读取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
这种类型的命令似乎无法正常工作。
答案 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)
DB Connect应用程序可能适合您。请参阅http://docs.splunk.com/Documentation/DBX/3.1.3/DeployDBX/Createandmanagedatabaseoutputs。
答案 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