我有syslogs存储为段(即每个系统日志消息被分成如下所示的部分),我需要帮助将这些分段的部分合并为一条消息。
下面是示例系统日志消息:
2018-01-06 22:00:00 aaa bbbb xxxxxxxxxx 3 0 text,text,text,text,text,text,text,text,...
2018-01-06 22:00:00 aaa bbbb xxxxxxxxxx 3 1 text,text,text,text,text,...(i.e.continuation of message from part 1)
2018-01-06 22:00:00 aaa bbbb xxxxxxxxxx 3 2 text,text,text.(i.e.continuation of message from part 2)
此处xxxxxxxxxx
(此字段为10位数ID)aaa
,bbbb
都是系统日志消息的标题)
预期产出:
2018-01-06 22:00:00 aaa bbbb xxxxxxxxxxx text,text,text...
答案 0 :(得分:1)
您可以使用以下awk
命令格式化您的系统日志:
<强>码强>
awk '{str=$1" "$2" "$3" "$4" "$5}{for(j=8; j<=NF; j++)a[str]=a[str]" "$j}END{for(i in a)print i""a[i]}' input.log
输入的输出:
2018-01-06 22:00:00 aaa bbbb xxxxxxxxxx text,text,text,text,text,text,text,text,... text,text,text,text,text,...(i.e.continuation of message from part 1) text,text,text.(i.e.continuation of message from part 2)
<强>解释强>
for(j=8; j<=NF; j++)a[$1" "$2" "$3" "$4" "$5]=a[$1" "$2" "$3" "$4" "$5]" "$j
将创建一个数组,其中索引是前5个字段的串联,这将在分组后重复使用,每个单元格的值将填充第8个字段到EOL。 END{for(i in a)print i""a[i]}
将被触发,并将显示每个索引/键(即$1" "$2" "$3" "$4" "$5
)及其内容(即具有相同索引的行的分组)。