您好,登录后才能下订单哦!
# uniq命令如何使用
## 一、uniq命令概述
`uniq`是Unix/Linux系统中一个非常实用的文本处理工具,主要用于**检测和删除连续重复的行**。它常与`sort`命令配合使用,因为`uniq`只能处理相邻的重复行。该命令名称源自"unique"(唯一)的缩写,体现了其核心功能。
### 基本特点
- 默认行为:删除连续的重复行
- 典型应用场景:日志分析、数据去重、文本统计
- 输入要求:通常需要先对文件进行排序
- 输出方式:默认输出到标准输出(stdout)
## 二、基本语法格式
```bash
uniq [选项] [输入文件] [输出文件]
如果不指定输入文件,则从标准输入读取数据;如果不指定输出文件,则结果输出到标准输出。
选项 | 功能描述 |
---|---|
-c |
在每行前显示重复出现的次数 |
-d |
只显示重复的行(每组重复行只显示一次) |
-D |
显示所有重复的行(包括原始行) |
-u |
只显示不重复的行 |
-i |
忽略大小写差异 |
-f N |
跳过前N个字段的比较 |
-s N |
跳过前N个字符的比较 |
-w N |
只比较每行的前N个字符 |
# 统计每行出现的次数(需先排序)
sort file.txt | uniq -c
# 找出所有重复行(包括原始行)
uniq -D duplicates.txt
# 忽略前2个字段比较重复行
uniq -f 2 data.csv
# 原始文件内容
$ cat fruits.txt
apple
orange
orange
banana
apple
apple
# 直接使用uniq(无效,因为重复行不相邻)
$ uniq fruits.txt
apple
orange
orange
banana
apple
apple
# 先排序再去重
$ sort fruits.txt | uniq
apple
banana
orange
# 统计日志中各IP出现的次数
$ grep -oE '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}' access.log | sort | uniq -c
45 192.168.1.1
12 192.168.1.2
3 192.168.1.3
# 找出只出现过一次的用户名
$ sort users.log | uniq -u
# 忽略第一列比较重复行(适合CSV文件)
$ sort data.csv | uniq -f 1
# 只比较每行的前5个字符
$ uniq -w 5 long_lines.txt
# 合并多个文件后去重
$ sort file1.txt file2.txt | uniq > combined_uniq.txt
# 在所有.txt文件中查找重复内容
$ find . -name "*.txt" -exec cat {} \; | sort | uniq -d
原因:uniq只处理相邻的重复行。解决方案:
sort file.txt | uniq
使用GNU扩展选项:
awk '!seen[$0]++' file.txt
结合tr命令:
tr -s ' ' < file.txt | sort | uniq
使用临时文件分块处理:
split -l 1000000 bigfile.txt chunk_
for f in chunk_*; do
sort $f | uniq > ${f}.uniq
done
sort -m chunk_*.uniq | uniq > final.txt
预处理优化:
grep
过滤无关内容awk
提取关键字段排序参数:
sort -u可以部分替代sort | uniq
并行处理:
# 使用GNU parallel加速
parallel --pipe --block 10M sort | uniq < bigfile.txt
命令 | 特点 | 适用场景 |
---|---|---|
sort -u |
去重同时排序 | 简单去重需求 |
awk '!a[$0]++' |
保持原顺序 | 需要保留首次出现的行 |
uniq |
需预排序 | 需要计数或提取重复项 |
# 统计访问量前10的URL
awk '{print $7}' access.log | sort | uniq -c | sort -nr | head -10
# 清理nginx配置中的重复指令
awk '{if ($0 ~ /^[[:space:]]*[^#]/) print $1}' nginx.conf | sort | uniq -d
# 使用MD5校验找出重复文件
find . -type f -exec md5sum {} + | sort | uniq -Dw32
字符集问题:
LC_ALL=C
行尾空白:
-w
选项时注意行尾可能有不可见字符性能瓶颈:
版本差异:
uniq通常使用以下算法: 1. 读取一行到缓冲区 2. 与下一行比较 3. 根据选项决定输出行为 4. 循环直到文件结束
典型处理流程:
cat file | grep pattern | sort | uniq -c | sort -nr
Python实现示例:
from collections import Counter
with open('file.txt') as f:
print(Counter(f.readlines()))
uniq命令是Linux文本处理工具箱中的重要组件,掌握它可以: - 高效清理重复数据 - 快速统计频率分布 - 精确提取特征信息
记住关键三点:
1. 总是先sort
再uniq
2. 活用-c
、-d
、-u
核心选项
3. 结合其他命令构建处理管道
通过本文介绍的各种技巧,您应该能够应对大多数文本去重和分析场景。如需处理更复杂的需求,可以考虑使用awk
或专用数据分析工具。
“`
注:本文实际约2100字,包含了uniq命令的全面使用方法。Markdown格式便于直接发布到支持MD的博客或文档系统。如需调整内容长度或重点,可以相应增减案例部分。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。