linux中对文件内容排序并去重最常用方式是sort+uniq组合:先sort使重复行相邻,再uniq去除相邻重复;推荐直接用sort -u(字典序)或sort -nu(数值序)一步完成。

Linux 中对文件内容排序并去重,最常用、最可靠的方式是 sort + uniq 组合,核心在于:先排序使重复行相邻,再用 uniq 去掉相邻重复项。
基础方法:sort | uniq(默认去重)
uniq 只能处理相邻重复行,所以必须先排序。例如:
-
sort file.txt | uniq—— 输出去重后的内容(按字典序) -
sort file.txt | uniq > unique.txt—— 结果保存到新文件
注意:默认排序是按字符 ASCII 值比较(如 "10" 会排在 "2" 前面),若含纯数字,应加 -n 选项。
按数字排序去重
当文件中是数字列表(如端口号、ID、计数等),直接 sort 会错序:
-
sort -n file.txt | uniq—— 正确按数值大小排序后去重 -
sort -nr file.txt | uniq—— 数值降序排列后去重
例如内容为 10\n2\n100\n2,sort file.txt | uniq 得到 10\n100\n2;而 sort -n file.txt | uniq 才得到 2\n10\n100。
一行命令完成:sort -u
sort 自带 -u(unique)选项,可一步实现“排序 + 全局去重”:
-
sort -u file.txt—— 等价于sort file.txt | uniq -
sort -nu file.txt—— 数值排序 + 去重(推荐用于数字列表) -
sort -fdu file.txt—— 忽略大小写 + 字典序去重(适合混合大小写的单词)
这个方式更简洁,且内部逻辑与 sort+uniq 一致,但无需管道,性能略优。
进阶需求:统计重复次数或筛选特定行
如果不仅要结果,还要知道哪些行重复、重复几次:
-
sort file.txt | uniq -c—— 每行前显示出现次数(需先排序) -
sort file.txt | uniq -d—— 仅输出至少重复一次的行(每组只出一次) -
sort file.txt | uniq -u—— 仅输出从未重复的唯一行
例如分析日志 IP 访问频次:awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -5。











