首页 > 解决方案 > 使用 awk 从日志中解析数据

问题描述

我想提取 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

标签: linuxunixawkgrep

解决方案


我没有使用 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.:“输入”是我写输入的文件的名称。提供的输入的结果是:

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

推荐阅读