在Linux系统中,统计文件中唯一行的数量是一项常见任务。本文介绍两种高效的命令行方法:使用sort
和uniq
,以及使用awk
。
目录
使用sort
和uniq
统计唯一行
此方法结合了sort
和uniq
的功能,提供了一种直接的方法。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
,表示三行唯一行。
选择最适合您需求的方法。对于基本任务,sort
和uniq
更简单;awk
为复杂场景提供了更大的灵活性。