使用 awk 转换日志文件

Transform log file using awk

我有一个 Java 日志文件,想使用 awk 转换它。该文件具有以下记录结构:

filename:date time [level] (thread) message

这是一个示例行:

2018-01-19-19.prod.com.gz:2018-01-19 19:14:29,964 [INFO] (Runner for {AccountId: ‘1234’, JobFlowId: ‘abcd’, TaskId: ‘4321’, Type: ‘TestType’}) com.damluar.AbstractObjectCache: Found unexpired object in local cache for key: testkey

生成的文件需要包含字段并以 \t 作为分隔符:

如果我使用空格或 : 作为分隔符,那么 threadmessage 字段的内容也会被拆分。最好的处理方法是什么?

sed 's/:/:\t/;s/\[/\t&/;s/\]/&\t/;s/)/)\t/' log

以上行将用 tab 分隔必填字段。如果你想输出它们,你可以将它传递给 awk 来检查:

echo "yourExample"||sed 's/:/:\t/;s/\[/\t&/;s/\]/&\t/;s/)/)\t/'|awk -F '\t' '{for(i=1;i<=NF;i++)print $i}'
2018-01-19-19.prod.com.gz:
2018-01-19 19:14:29,964 
[INFO]
 (Runner for {AccountId: ‘1234’, JobFlowId: ‘abcd’, TaskId: ‘4321’, Type: ‘TestType’})
 com.damluar.AbstractObjectCache: Found unexpired object in local cache for key: testkey