首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >uniq命令不能正常工作?

问uniq命令不能正常工作?
EN

Ask Ubuntu用户
提问于 2014-10-14 00:44:40
回答 3查看 42.3K关注 0票数 38

因此,我正在检查我的文件的md5散列,并将其作为输出:

代码语言:javascript
复制
657cf4512a77bf47c39a0482be8e41e0  ./dupes2.txt
657cf4512a77bf47c39a0482be8e41e0  ./dupes.txt
8d60a927ce0f411ec94ac26a4785f749  ./derpina.txt
15f63928b8a1d5337137c38b5d66eed3  ./foo.txt
8d60a927ce0f411ec94ac26a4785f749  ./derp.txt

但是,在运行find . -type f -exec md5sum '{}' ';' | uniq -w 33以找到唯一的散列之后,我得到以下内容:

代码语言:javascript
复制
657cf4512a77bf47c39a0482be8e41e0  ./dupes2.txt
8d60a927ce0f411ec94ac26a4785f749  ./derpina.txt
15f63928b8a1d5337137c38b5d66eed3  ./foo.txt
8d60a927ce0f411ec94ac26a4785f749  ./derp.txt

根据我的理解,derpina.txt或derp.txt中只有一个应该出现,因为它们的散列是相同的。我是不是遗漏了什么?有人能告诉我为什么会产生这样的结果吗?

EN

回答 3

Ask Ubuntu用户

回答已采纳

发布于 2014-10-14 01:11:54

您需要在使用sort之前使用uniq:

代码语言:javascript
复制
find . -type f -exec md5sum {} ';' | sort | uniq -w 33

uniq只删除重复行。它不会重新排序寻找重复的线路。这部分是sort做的。

这在man uniq中有记录:

注意:uniq不会检测重复的行,除非它们是相邻的。您可能希望先对输入进行排序,或者使用不带sort -u的uniq。

票数 79
EN

Ask Ubuntu用户

发布于 2014-10-14 01:41:55

需要对uniq的输入进行排序。所以举个例子,

代码语言:javascript
复制
find . -type f -exec md5sum '{}' ';' | sort | uniq -w 33

会起作用的。-w (--check-chars=N)使行仅对第一列具有唯一性;此选项适用于这种情况。但是,指定uniq行的相关部分的可能性是有限的。例如,没有任何选项可以指定在第3和第5列上工作,而忽略第4列。

命令sort对于唯一的输出行本身有一个选项,对于用于排序的键,行是唯一的。这意味着我们可以使用sort强大的键语法来定义行的哪一部分应该是uniq。

举个例子,

代码语言:javascript
复制
find . -type f -exec md5sum '{}' ';' | sort -k 1,1 -u

给出了同样的结果,但是sort部分对于其他用途更灵活。

票数 7
EN

Ask Ubuntu用户

发布于 2017-12-01 19:59:12

或者你可以安装杀手锏,我的程序,销毁每一个该死的副本有!

https://github.com/batchmcnulty/killdupes

:-)

票数 0
EN
页面原文内容由Ask Ubuntu提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://askubuntu.com/questions/536775

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档