Linux 巡检状态如何统计频次:用 sort 和 uniq 找出最常见结果

2026-10-27 / 0 评论 / 3 阅读

Linux 巡检状态如何统计频次:用 sort 和 uniq 找出最常见结果 教程示意图

发布日期:2026-10-27

适用场景

你已经能够把巡检结果保存成文本,但面对几百行重复状态,仍然只能靠滚屏判断哪种问题最多。本教程把“一行一个状态”的文件变成频次排行榜,最终得到每种状态出现多少次的报告。方法适合简单状态清单、固定错误名称和经过整理的事件类型,不直接处理含有逗号转义、多行字段的复杂表格。

先明确统计口径:下面比较的是整行内容。两行只要多了一个空格,便可能被视为不同记录。不要把带有时间戳的完整日志直接拿来统计,否则每行时间不同,几乎得不到有用的合并结果。

原理

排序工具负责把相同内容放到一起,去重计数工具再统计连续重复行。GNU 的 uniq 文档明确说明,它默认只处理相邻的重复行。因此,直接对原始清单计数,可能把同一种状态拆成多个小组。

本教程先按整行排序,再计数,最后把计数按数值倒序排列。排序时临时使用 C 区域设置,让比较规则保持一致;这只作用于当前命令,不修改系统语言。具体排序选项见 GNU sort 文档。

准备工作

使用带有 GNU Coreutils 的 Linux,例如常见的 Ubuntu 或 Debian 环境。以普通用户操作,在文件管理器中创建一个空练习目录,再在该目录打开终端。确认其中没有同名文件,因为下面的输出重定向会覆盖已经存在的目标文件。

示例中的文件名都是本次练习实际创建的文件。正式处理自己的资料时,把输入文件名替换成真实文件路径,并保留引号;不要直接把输出文件设成输入文件。

分步骤操作

第一步:创建能够人工核对的样本

printf '%s\n' normal warning normal failed warning normal > status-input.txt
cat status-input.txt

这会生成六行数据。正常状态应出现三次,警告两次,失败一次。先用小样本建立正确结果,之后才适合换成真实资料。这里的英文单词是数据值,不是需要点击的界面项。

第二步:先排序,再计数

LC_ALL=C sort -- status-input.txt > status-sorted.txt
uniq -c -- status-sorted.txt > status-counts.txt
cat status-counts.txt

计数选项会在每组内容前面输出次数。中间文件保留下来,便于检查到底是排序阶段还是计数阶段出现了问题。命令中的双短横线表示选项已经结束,后面的名称按文件名解释。

第三步:按次数生成排行榜

LC_ALL=C sort -k1,1nr -k2 status-counts.txt > status-ranking.txt
cat status-ranking.txt

第一个排序键只取第一列,并按数值倒序排列;第二个排序键用于次数相同时继续排列状态文字。对于本教程中不含前导空白的单词型状态,第一行应是出现三次的正常状态,随后是警告和失败。

不要只使用普通倒序排序来处理次数。普通文本比较看的是字符顺序,无法可靠表达十次比九次更多。数值排序选项才与这里的统计含义一致。

第四步:换成自己的状态清单

先复制真实清单到练习目录,给它使用一个新的文件名。确认每行只有一个需要统计的类别,再逐步重复排序、计数和排行。第一轮不要把三步压成一条很长的管道,保留中间结果更容易理解。

验证方法

wc -l -- status-input.txt status-sorted.txt
cat status-counts.txt

两个文件都应显示六行;三组计数相加也应等于六。再回看原始样本,核对正常、警告、失败分别为三、二、一。行数保持一致只能证明没有明显丢行,不能单独证明分类正确,因此必须同时检查类别文字。

GNU wc 文档说明,行数统计实际计算换行符。样本由打印命令逐行生成,末尾带换行;外部文件若最后一行没有换行,行数可能比肉眼看到的记录数少一。

常见错误

同一种状态出现两组时,先检查大小写和空白。可以查看不可见字符:

cat -A -- status-input.txt

行尾若出现额外的回车标记,说明文件可能来自另一种换行格式。先在副本中统一格式,再重新统计。不要为了让结果“看起来整齐”就直接删除所有空白,状态名称内部可能本来就需要空格。

空行也会参与统计。如果空行代表缺失数据,应单独记录缺失数量;如果它只是导出时的分隔行,也应在清洗规则中明确说明。大小写是否合并同样属于业务口径,不能让命令替你决定。

安全与回退

整个练习不需要管理员权限,也不修改服务。原始清单始终保留,发现口径错误时,重新生成中间文件即可。不要把输入和输出写成同一个路径,因为命令读取之前,重定向就可能清空文件。

真实巡检报告可能包含设备名称或业务信息,分享前只保留必要的统计类别。练习结束后,可以在文件管理器中删除本次生成的中间文件;保留原始资料和采用的统计规则,方便以后复查。

参考资料与转载说明

本文依据上述公开资料进行中文原创整理,不是逐句翻译,也不替代厂商手册。操作前请核对自己的版本、型号和备份。

评论一下?

OωO
取消