使用awk转换日志文件

使用awk转换日志文件,awk,gawk,Awk,Gawk,我有一个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.A

我有一个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作为分隔符:

  • 数据+时间(已排序)
  • 水平仪
  • 线
  • 信息
如果我使用空格或
作为分隔符,那么
线程
消息
字段的内容也会被拆分。最好的处理方法是什么

sed 's/:/:\t/;s/\[/\t&/;s/\]/&\t/;s/)/)\t/' log
上行将通过
选项卡
分隔所需字段。如果要输出它们,可以通过管道将其传输到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
echo“yourExample”sed/:/:\t/;s/\[/\t&/;s/\]/&\t/;s/)/)\t/| awk-F'\t'{for(i=1;i
上述行将通过
选项卡
分隔所需字段。如果要输出这些字段,可以通过管道将其发送到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

echo“yourExample”| sed's/:/:\t/;s/\[/\t&/;s/\]/&\t/;s/)/)\t/“| awk-F'\t”“{for(i=1;iyou至少应该给出日志的一些行作为示例,您认为如何?线程字段是否包含(嵌套的(括号))?我发布了一个示例。不,线程不应该有嵌套的paren。以格式化的方式发布结果文件的片段。结果文件中应该有什么字段分隔符?选项卡应该是分隔符,以便我可以将其视为csv文件。您至少应该给出一些日志行作为示例,您认为线程字段会包含什么(嵌套的(括号))?我发布了一个示例。不,线程不应该有嵌套的参数。以格式化的方式发布结果文件的片段。结果文件中应该有什么字段分隔符?选项卡应该是分隔符,以便我可以将其视为csv文件