我有一个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
字段的内容也会被拆分。处理它的最佳方法是什么?
答案 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