Linux下按首列分组合并日志文件列的技术需求与问题
解决日志按时间戳分组合并第三列的问题
我来帮你搞定这个日志处理的需求!首先得先指出你之前用的awk命令哪里出了问题,再给你正确的实现方案。
原命令的问题分析
你写的awk命令有几个关键错误:
message+=$3是数值加法操作,不是字符串拼接——这会把第三列的内容当成数字相加,完全不符合你合并字符串的需求;- 没有按时间戳分组存储:你用单个
message变量存所有内容,无法区分不同时间戳的分组; - 时间戳取值错误:从你的输入和期望输出看,时间戳是前两列的组合(比如
04.04.2018 11:52:44.014),但你只取了$1(日期部分),这会导致分组错误。
正确的awk实现
下面这个命令可以完美实现你的需求:
awk '{key = $1 " " $2; arr[key] = arr[key] $3} END {for (k in arr) print k, arr[k]}' your_log_file.txt
命令逻辑解释
- 定义分组Key:把每行的前两列拼接成完整的时间戳,作为分组的唯一标识
key; - 关联数组存储:用关联数组
arr,以key为索引,将当前行的第三列$3追加到对应数组元素的末尾; - 输出结果:处理完所有日志行后,遍历数组,输出每个时间戳和对应的合并后内容。
测试验证
用你提供的输入日志运行这个命令,会得到完全符合预期的输出:
04.04.2018 11:52:44.014 123abcabc123xyz
04.04.2018 11:52:46.023 456abcdddfffzzz111d
如果你的日志格式有变化(比如时间戳确实是单独的第一列),只需要把key = $1 " " $2改成key = $1即可。
内容的提问来源于stack exchange,提问作者Code_So1dier
相关产品推荐
相关产品推荐

