如何优化sed命令实现从ping日志中提取时间与丢包率并合并为单行?
你可以利用sed的保持空间暂存时间信息,匹配到丢包率后再拼接输出,优化后的命令如下:
sed -r -n '/^... [0-9]+ ... [0-9]{4} [0-9]{2}:[0-9]{2}/{s/(... [0-9]+ ... [0-9]{4} [0-9]{2}:[0-9]{2}).*/\1/;h};/[0-9]+% packet loss/{s/.* ([0-9]+%) packet.*/\1/;x;G;s/\n/, /;p}' sample.log
命令逻辑说明:
- 匹配到时间行时,先提取符合要求的时间字符串,用
h命令存入保持空间暂存,不直接输出 - 匹配到包含丢包率的统计行时,先提取丢包率数值,再用
x命令交换保持空间和当前模式空间的内容,将暂存的时间取出 - 用
G命令把丢包率追加到时间字符串后,将默认的换行分隔符替换为,后输出
执行上述命令即可直接得到你需要的「时间, 丢包率」格式的输出,无需额外管道拼接处理。
内容的提问来源于stack exchange,提问作者mrossw
相关产品推荐
相关产品推荐

