【问题标题】:parsing data from log using awk使用 awk 从日志中解析数据
【发布时间】:2020-07-15 00:30:58
【问题描述】:

我想提取 machineId userId origReqUri,filename,mime,size,checksum 作为逗号分隔的日志模式。有什么 awk 命令可以做到吗?

test1.1/test.log.2020-07-14-20:2020-07-14 20:47:44,239 [http--1594759553405 sessionId:4567 nodeId:node-1  machineId:31656 userId:2540397 origReqUri:/test1/batch] INFO  com.test.company  - [RETURN INFO - RETURN]  - TRACK_PREPROCESSED_DATA_POPULATION: Populated test_doc_version entry for doc version [1130783_1_0] with data from test_doc_metadata. File name: [09014b3080135f44.doc]. Mime type: [application/msword]. Content size: [100352]. MD5 checksum: [7ef30e834107990c95c7e53f7b6f6ee6].    [source:]

我试过了

grep machineId:31656 test.1/test.log.2020-07-14-* |grep "Populated test_doc_version entry" | awk machineId |awk origReqUri

【问题讨论】:

  • 我可以在 30 秒内提供的一件事可能会有所帮助,请尝试 awk '/machineID|origReqUri/ 。祝你好运。
  • 预期的输出是什么?您尝试的远非有效尝试,没有什么意义。

标签: linux unix awk grep


【解决方案1】:

我没有使用 AWK,但我会主要使用 SED 和 GREP 来解决您的问题,如下所示:

sed s/': '/':'/g input | sed s/' '/\\n/g | grep 'machineId\|userId\|origReqUri\|name\|type\|size\|checksum' | sed 's/\[\|\]\|\.//g' | tr '\n' ',' | sed 's/name/filename/g' | sed 's/type/mime/g' | sed 's/.$//'

ps.:“input”是我在其中写入输入的文件的名称。 提供的输入的结果是:

machineId:31656,userId:2540397,origReqUri:/test1/batch,filename:09014b3080135f44doc,mime:application/msword,size:100352,checksum:7ef30e834107990c95c7e53f7b6f6ee6

这可能不是最好的解决方案,我们当然可以让它更小更漂亮,但我希望它对你有所帮助。

还有另一种解决方案,更简单且更具可读性。你可以这样做:

tr -s ' :[]' ' ' < input | cut -d ' ' -f 12,14,16,39,43,47,51

在这里,它不是逗号分隔的。我想最好不要使用逗号,因为它们在特殊符号列表中。

这个结果是:

31656 2540397 /test1/batch 09014b3080135f44.doc application/msword 100352 7ef30e834107990c95c7e53f7b6f6ee6

【讨论】:

  • 引用围绕脚本 (sed 's/: /:/g'),而不是脚本 (s/': '/':'/g)。几乎任何时候您使用多个管道对工具进行多次调用只是为了操作文本(当然当它是 6 个 seds、1 个 grep、1 个 tr 和 7 个管道时!)您应该改用 awk。 tr '\n' ',' 的输出不再是 POSIX 文本文件(文本文件必须以 \n 结尾),因此之后任何给定工具将其作为输入执行的操作都是未定义的行为。
  • 我不确定it's better not to use commas since they are in the list of special symbols 是什么意思——逗号没什么特别的。
猜你喜欢
  • 2012-04-20
  • 2013-11-26
  • 1970-01-01
  • 2021-04-24
  • 2020-09-13
  • 2017-11-10
  • 1970-01-01
  • 1970-01-01
  • 2022-01-25
相关资源
最近更新 更多