首页 > 解决方案 > 从日志文件中读取的 AWK 脚本

问题描述

我需要从日志文件中读取某些参数,然后更新到数据库。我正在尝试实现第一部分,即在 shell 脚本中使用 awk 命令从日志文件中读取

日志文件可能包含以下行或更多-

[2018-05-22T11:35:17,857] [RQST: rqst_3ADE-5439-598D-1B8B | TB: 9000042] - [588455375] - INFO - com.test.webapp.services.functions.TestTransactionService - Line 769 - requestType="TESTING",partnerName="Test Merchant 123",testId="123456",lob="TEST1_TO_TEST2",tranType="TEST1",paymentType="P2M",amount="110.00",currency="840",processor="CBN",network="TestSend",responseCode="00", acctNumLastFour="0087",binCountry="USA",binCurr="USD"
[2018-05-22T11:35:17,857] [RQST: rqst_2AEF-2339-598D-1B8B | TB: 9000043] - [588455376] - INFO - com.test.webapp.services.functions.TestTransactionService - Line 770 - requestType="TESTING",partnerName="Test Merchant 234",testId="234567",lob="TEST2_TO_TEST3",tranType="TEST2",paymentType="P2M",amount="120.00",currency="850",processor="CBN",network="TestSend",responseCode="00", acctNumLastFour="0087",binCountry="USA",binCurr="USD"
[2018-05-22T11:35:17,857] [RQST: rqst_4EDA-4539-598D-1B8B | TB: 9000044] - [588455377] - INFO - com.test.webapp.services.functions.TestTransactionService - Line 771 - requestType="TESTING",partnerName="Test Merchant 345",testId="345678",lob="TEST3_TO_TEST4",tranType="TEST3",paymentType="P2M",amount="130.00",currency="860",processor="CBN",network="TestSend",responseCode="00", acctNumLastFour="0087",binCountry="USA",binCurr="USD"

我需要应用过滤器处理器和支付类型,并将金额、货币、网络和响应代码的值检索到将插入到 Oracle DB 表中的 shell 脚本中的变量。

我是 ShellScript 和 AWK 的新手,无法包装它。我试过使用

awk '/amount/{print}' testAPI.log

但是,正在返回所有有数量的行。

标签: bashshellawk

解决方案


由于您没有指定预期的输出,这是一个您可以根据需要定制的模板

$ awk -F' - ' '{n=split($NF,a,",");
                for(i=1;i<=n;i++) {split(a[i],b,"="); kv[b[1]]=b[2]}}
     kv["processor"]=="\"CBN\"" 
  && kv["paymentType"]=="\"P2M\""{print kv["amount"],kv["currency"]}' file

"110.00" "840"
"120.00" "850"
"130.00" "860"

您也可以修剪双引号,但不确定是否需要它...


推荐阅读