答案:在Linux中去除重复行最有效的方法是结合sort和uniq命令。由于uniq只能去除相邻的重复行,因此必须先使用sort命令将相同内容的行聚集在一起。例如,执行sort data.txt | uniq可实现完整去重,等效的简洁写法为sort -u data.txt。此外,uniq支持多种参数扩展功能:-c统计行出现次数,-d仅显示重复行,-u仅显示唯一行,-i忽略大小写,-f跳过前N个字段,-s跳过前N个字符。对于大文件,可通过sort -S指定内存缓冲区或-T指定临时目录优化性能。超大规模数据建议使用Spark、Hadoop或数据库的DISTINCT功能。

在Linux中去除重复行,最核心且常用的工具是
uniq
uniq
sort
uniq
要高效地在Linux中去除文件中的重复行,最经典的组合拳就是
sort
uniq
假设你有一个名为
data.txt
apple banana apple orange banana grape
基本去重:
如果你直接对
data.txt
uniq data.txt
uniq
apple banana apple orange banana grape
这是因为第一个
apple
apple
banana
所以,正确的做法是先用
sort
|
uniq
sort data.txt | uniq
执行这个命令后,输出会是:
apple banana grape orange
这就达到了我们想要的效果。
如果你想直接将去重后的结果保存到新文件,可以这样:
sort data.txt | uniq > unique_data.txt
一个更简洁的技巧:
其实,
sort
-u
--unique
uniq
sort -u data.txt
这个命令会得到和
sort data.txt | uniq
sort | uniq
sort -u
uniq
sort
说实话,第一次接触
uniq
uniq
这就是为什么我前面强调它只能处理“相邻”重复行的原因。举个例子,如果你的文件是这样:
cat dog cat cat bird
当你直接
uniq
cat dog cat bird
你看,第二个
cat
cat
cat
cat
cat
dog
uniq
cat
cat
这就是
sort
sort
sort
uniq
sort
uniq
uniq
uniq
-c
sort data.txt | uniq -c
对于
data.txt
2 apple
2 banana
1 grape
1 orange可以看到,
apple
banana
-d
-d
sort data.txt | uniq -d
输出:
apple banana
它只会列出那些在原始文件中出现过多次的行,每行只显示一次。
-u
-d
-u
sort data.txt | uniq -u
输出:
grape orange
这对于找出文件中真正的“独一份”数据很有帮助。
-i
# 假设文件内容有 Apple 和 apple sort -f data.txt | uniq -i
注意,这里
sort
-f
uniq -i
-f N
# 假设文件内容是: # 2023-01-01 apple # 2023-01-02 banana # 2023-01-03 apple # 2023-01-04 banana sort -k 2,2 file_with_dates.txt | uniq -f 1
这里
sort -k 2,2
uniq -f 1
-s N
-f
# 假设文件内容是: # ID12345_dataA # ID12345_dataB # ID67890_dataA sort file.txt | uniq -s 6 # 忽略前6个字符("ID12345_")
这在处理有固定前缀但后缀不同的数据时很有用。
这些参数的组合使用,能让
uniq
当处理非常大的文件,比如几十GB甚至TB级别的文件时,
sort | uniq
sort
sort
所以,对于超大文件,我们确实需要考虑一些更高效或者说更适合大规模数据处理的策略:
优化 sort
sort
-S
sort -S 2G file.txt | uniq
sort
sort
/tmp
/tmp
-T
sort -T /mnt/ssd_temp -u large_file.txt
分块处理(如果可行): 如果你的数据可以逻辑上分成多个独立的部分,并且去重可以在每个部分内独立进行,最后再合并去重,那么可以考虑分块处理。但这通常比较复杂,需要自定义脚本来管理。对于通用的去重场景,这不常见。
使用专门的大数据工具: 对于真正意义上的“大数据”,比如TB级别的文件,传统的命令行工具可能会力不从心。这时候,更专业的工具或平台会是更好的选择:
distinct()
sort | uniq
DISTINCT
哈希表/Bloom Filter(针对特定场景): 对于某些场景,如果你只需要知道某个元素是否“可能”存在,或者可以容忍极低的误判率,那么可以考虑使用Bloom Filter。它是一种空间效率很高的数据结构,可以快速判断一个元素是否在集合中。但它不能提供精确的去重,也无法直接输出去重后的文件。这更多是理论上的优化,实际命令行操作中很少直接用到。
总的来说,对于大多数日常工作和文件大小在几GB到几十GB的范围,
sort -u
sort | uniq
以上就是如何在Linux中去除重复行 Linux uniq相邻去重实战的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号