bash - 从日志文件中读取的 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
但是,正在返回所有有数量的行。
解决方案
由于您没有指定预期的输出,这是一个您可以根据需要定制的模板
$ 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"
您也可以修剪双引号,但不确定是否需要它...
推荐阅读
- jquery - 禁用按钮在 IE 11 中不起作用,但它在 chrome 中起作用
- android - 即使设置环境变量后也无法识别颤振
- ios - 重构我的数组迭代的建议?
- php - 自 PHP 7.2 起不推荐使用函数 read_exif_data()
- django - Django Rest Framework:如何从具有特定对象 ID 的数据库中呈现数据
- php - 如何通过继承正确使用 php 文档?
- apache-spark - 在缓存中找不到 Spark HDFS_DELEGATION_TOKEN
- java - 在 build.xml 中更改 jdk
- ios - 如何在 SwiftUi 中确定 tabBar 的坐标,以便在其正上方放置一个滑动卡
- spring-boot - 在基于 Java Spring Boot 的云功能中,如何访问 HttpServletRequest 或 HttpServletResponse