使用awk转换日志文件

时间:2018-02-13 21:37:35

标签: awk gawk

我有一个Java日志文件,想要使用SELECT Max(vernum) FROM ATTRIBUTE_DATA AD WHERE AD.id = DT.dataid AND AD.defid = 3070056 AND AD.attrid = 4 对其进行转换。该文件具有以下记录结构:

awk

以下是一个示例行:

filename:date time [level] (thread) message

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

  • 数据+时间(已排序)
  • 水平
  • 螺纹
  • 消息

如果我使用空格或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 作为分隔符,那么:thread字段的内容也会被拆分。处理它的最佳方法是什么?

1 个答案:

答案 0 :(得分:2)

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