Linux Command Line

Linux系统高效统计文件唯一行数

Spread the love

在Linux系统中,统计文件中唯一行的数量是一项常见任务。本文介绍两种高效的命令行方法:使用sortuniq,以及使用awk

目录

使用sortuniq统计唯一行

此方法结合了sortuniq的功能,提供了一种直接的方法。sort按字母顺序排列行,这是uniq的先决条件,uniq只统计连续相同的行。uniq中的-c选项会在每行前面添加一个计数前缀。

要统计file.txt中的唯一行:


sort file.txt | uniq -c

这将显示每行唯一行的计数。要获取唯一行的总数,请将输出通过管道传输到wc -l


sort file.txt | uniq -c | wc -l

示例:

如果file.txt包含:


apple
banana
apple
orange
banana
apple

sort file.txt | uniq -c输出:


      3 apple
      2 banana
      1 orange

sort file.txt | uniq -c | wc -l输出:


3

使用awk统计唯一行

awk提供了一种灵活的解决方案,尤其适用于更复杂的场景。此方法使用关联数组来跟踪唯一行及其计数。

要统计唯一行并显示其计数:


awk '{count[$0]++} END {for (line in count) print count[line], line}' file.txt

此脚本使用行作为键,递增count数组中每行的计数。END块遍历数组,打印每行的计数和行本身。

要仅获取唯一行的总数:


awk '{count[$0]++} END {print length(count)}' file.txt

这使用length(count)直接输出唯一行的数量(数组的大小)。

示例:

使用相同的file.txt,第一个awk命令产生的输出与sort | uniq -c方法相同。第二个awk命令输出3,表示三行唯一行。

选择最适合您需求的方法。对于基本任务,sortuniq更简单;awk为复杂场景提供了更大的灵活性。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注