CentOS 7环境下如何移除ping输出的冗余首行与统计汇总信息
CentOS 7 环境下过滤ping输出的实现方法
CentOS 7 内置的iputils版ping确实没有提供原生参数,可直接关闭开头的目标说明行、末尾的统计汇总输出,通过管道做轻量文本过滤即可实现需求,有两种可直接嵌入现有脚本的写法:
推荐方案:精准匹配有效响应行
直接过滤所有包含time=字段的行写入日志,完全跳过无关内容:
ping -D -n -c 55 [目标IP或DNS地址] | grep --line-buffered 'time=' >> latency-[ip or dns].log
- 所有单条ping响应行固定包含
time=字段,和开头的PING标识行、空行、末尾的统计块天然区分,过滤无误差 - 加
--line-buffered参数是为了规避grep默认的输出缓存,避免长时间测试时日志迟迟不写入的问题 - 额外加
-n参数禁用ping自带的反向DNS解析,防止反向域名查询的耗时被计入ping响应时间,避免干扰你排查IP直连、域名ping结果差异的测试逻辑
备选方案:排除首尾无关区块
用sed直接跳过开头说明行、末尾统计块和空行,保留所有有效响应内容:
ping -D -n -c 55 [目标IP或DNS地址] | sed -n '/^PING/!{/^---/!{/^$/!p}}' >> latency-[ip or dns].log
- 逐层过滤逻辑:跳过以
PING开头的首行说明、跳过以---开头的统计区块、删除响应行之间的空行
适配排查场景的脚本调整提示
- 原脚本中连续两次执行相同ping命令的重复逻辑可直接删除,避免日志内容无意义重复;如果需要周期连续测试,可把单条ping命令放入循环,配合
sleep固定测试间隔,得到的时序数据更有排查价值 - 你目前使用的
-D参数输出的绝对Unix时间戳非常适合跨日志对比:可同时采集IP直连、域名解析两个目标的ping结果,按时间戳对齐同一时刻的两组数据,就能快速区分随机断连是本地链路故障、第三方测试服务异常还是DNS解析问题
内容的提问来源于stack exchange,提问作者ukitconsultant
相关产品推荐
相关产品推荐

