linux - 使用 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
解决方案
我没有使用 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
推荐阅读
- cordova - 科尔多瓦运行安卓模拟器
- python - Python 3.x 从 image-net 代码下载图像
- php - PHPSpreadsheet 仅部分应用了模板样式
- ibm-cloud - 我想知道将 vSRX 分配给 Public VLAN 的效果
- java - 将多个子 JAXBElement 放入父 JAXBElement
- android - 如何在 Retrofit Android 中随文件一起发送数据
- javascript - 如何通过添加新的指定选项来创建依赖 JS 下拉列表?
- amazon-s3 - 将 S3 挂载到 DBFS(天蓝色数据块),整数与挂载路径相加
- javascript - 在 Laravel 中不刷新侧边栏、导航栏和页脚 AdminLTE 刷新内容页面的最佳方法
- c# - 作为类写入 Button.Tag 并从中读取