使用 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 作为分隔符:
- 数据+时间(已排序)
- 等级
- 线程
- 留言
如果我使用空格或 :
作为分隔符,那么 thread
和 message
字段的内容也会被拆分。最好的处理方法是什么?
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
我有一个 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 作为分隔符:
- 数据+时间(已排序)
- 等级
- 线程
- 留言
如果我使用空格或 :
作为分隔符,那么 thread
和 message
字段的内容也会被拆分。最好的处理方法是什么?
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