回答
使用sort -u
比sort | uniq
少I/O,但最终结果是相同的。尤其是,如果文件足够大以至于sort
必须创建中间文件,那么sort -u
将使用略少或略小的中间文件,因为它可以消除重复,因为它会对每个文件集进行排序。如果数据高度重复,这可能是有益的;如果实际上有很少的重复,它不会产生太大的差别(绝对是二阶效果,与管道的一阶效应相比)。
请注意,有时管道是适当的。例如:
sort FILE | uniq -c | sort -n
将文件按照文件中每行出现次数的顺序排序,最后出现最多重复的行。 (我不觉得这个组合是Unix还是POSIX的习惯用法,可以用GNU排序将它们压缩成一个复杂的“排序”命令。)
有时候不使用管道很重要。例如:
sort -u -o FILE FILE
这样排序文件'in situ';即输出文件由-o FILE
指定,并且此操作保证安全(文件在被覆盖输出前被读取)。
没有什么,他们会产生相同的结果
sort -u
会更快略,因为它不需要管两个命令
之间的输出也看到题目我的问题:calling uniq and sort in different orders in shell
有一点区别:返回码。
问题是,除非设置了shopt -o pipefail
,否则管道命令的返回码将是最后一个的返回码。并且uniq
总是返回零(成功)。尝试检查退出代码,你会看到这样的事情(pipefail
此处未设置):
[email protected] ~ $ sort -u file_that_doesnt_exist ; echo $?
sort: open failed: file_that_doesnt_exist: No such file or directory
2
[email protected] ~ $ sort file_that_doesnt_exist | uniq ; echo $?
sort: open failed: file_that_doesnt_exist: No such file or directory
0
除此之外,该命令是等价的。
我曾在一些服务器上排序不支持'-u'选项。我们必须使用
sort xyz | uniq
您是否愿意指定哪个服务器具有哪个o/s版本以及何时?第七版UNIX™'sort'支持'-u',这是第一个被广泛使用的UNIX版本,因此所有其他版本(系统III,系统V,BSD等)都倾向于遵循它,所以我会很惊讶找到'sort'不支持'-u'的类Unix系统。 – 2012-12-27 15:05:09
当心!尽管“sort -u”和“sort | uniq”是等价的,但是排序的其他选项可能会打破等价。下面是coreutils手册中的一个示例:
例如,'sort -n -u'在检查唯一性时仅检查初始数字字符串的值,而'sort -n | uniq'检查整条生产线。
同样,如果您在关键字段上排序,排序使用的唯一性测试不一定会看到整个行。在过去被这个错误困扰之后,这些日子我倾向于在编写Bash脚本时使用“sort | uniq”。我宁愿有更高的I/O开销,也不愿冒着他们修改我的代码来添加额外的排序参数时,商店中的其他人不知道该特定陷阱的风险。
- 1. LInux排序/ uniq apache日志
- 2. 排序和uniq csv文件
- 3. 调用uniq并按shell中的不同顺序排序
- 4. perl中排序和uniq文本文件
- 5. perl的名单:: AllUtils uniq的和排序
- 6. 正确使用awk,排序和uniq
- 7. 的Linux的bash shell脚本排序线
- 8. Uniq -c按列排序?
- 9. 使用uniq命令(排序)
- 10. 使用'uniq'验证C++排序的行
- 11. linux shell和java
- 12. 排序和计数的方法比cat file |更快排序| uniq -c
- 13. Linux/Unix shell脚本中的冒泡排序
- 14. 蚂蚁相当于cut |排序| uniq
- 15. Uniq方法活动记录排序
- 16. 流水线切割排序uniq
- 17. 与排序的意外区别-u和uniq -u
- 18. 在Python中反向排序Shell排序
- 19. 红宝石:排序!和uniq!哪个先运行?
- 20. Linux shell和sort -t和-k
- 21. 在Linux shell中
- 22. 排序列的Linux
- 23. Shell排序按月
- 24. shell:从`uniq -c`撤消计数
- 25. shell:任何使用`uniq -c`的方法考虑到之前的`uniq -c`?
- 26. Uniq和计数
- 27. 在Linux中排序2列
- 28. 由Shell排序字符串排序
- 29. 如何在Unix中使用实时监控(tail -f),剪切,排序和uniq?
- 30. Unix的uniq的,排序和剪切命令删除重复的行
当你跑他们,你看到了什么?您是否尝试收集不同大小文件的时间差异?您可以运行一些实验并发布结果是您问题的一部分。 – 2010-08-01 17:08:50
我想知道是否有一个特殊情况是两个命令的行为不同,在正常执行中他们都给出了相同的结果 – yassin 2010-08-01 17:12:39
[“sort -u”和“sort | uniq“?](http://unix.stackexchange.com/q/76049/17265) – mtk 2014-04-15 10:04:24