Linux uniq命令用于报告或忽略文件中的重复行,它只会处理相邻的重复内容,因此通常要和sort命令一起使用才能真正去重。掌握uniq的常见用法,可以高效完成日志分析和数据整理任务。

一、uniq命令基本语法
uniq命令的最简单形式如下:
uniq [选项] [输入文件] [输出文件]
如果不指定输入文件,uniq会从标准输入读取数据;不指定输出文件时,结果打印到标准输出。
二、常用参数说明
| 参数 | 作用 |
|---|---|
| -c | 在每行前面显示该行在文件中出现的次数 |
| -d | 只显示重复的行 |
| -u | 只显示不重复的行 |
| -i | 比较时忽略大小写 |
| -f N | 跳过前面N个字段再比较 |
三、典型使用场景
1. 配合sort去除所有重复行
因为uniq只处理相邻重复,所以先排序再去重才是完整去重:
sort names.txt | uniq
2. 统计每行出现次数
使用-c参数可以计数:
sort access.log | uniq -c
3. 只查看重复行
排查异常时,可能只想看哪些内容重复了:
sort data.txt | uniq -d
4. 忽略大小写去重
当文本中大小写不统一,可用-i忽略差异:
sort list.txt | uniq -i
四、在脚本中的简单示例
下面这段shell脚本从标准输入读取内容,输出去重后的结果及重复次数:
#!/bin/bash # 从管道读取内容并去重计数 cat $1 | sort | uniq -c
将上述内容保存为count_uniq.sh,执行时传入文件即可。
五、注意事项
- uniq不能直接处理非相邻重复,务必先sort。
- 若字段分隔符复杂,可结合awk预处理后再uniq。
- 大文件排序去重可能占用较多内存,可用sort的临时文件参数优化。
记住:uniq擅长处理相邻行,sort加uniq才是文本去重的标准组合。