【问题标题】:why uniq don't give non-duplicated results为什么 uniq 不给出不重复的结果
【发布时间】:2013-09-23 18:18:20
【问题描述】:
find ./2012 -type f | cut -d '/' -f 5 | uniq

通常的文件名看起来像

./2012/NY/F/Zoe
./2012/NJ/M/Zoe

我想上面的命令应该只给出一次像 Zoe 这样的文件名的非重复结果,但事实并非如此。

为什么?我应该怎么写才能得到想要的结果?

【问题讨论】:

  • uniq 逐行比较,所以如果你被骗了,那么你的 cut 东西就没有正确过滤掉相关部分。名称后面也可能有不可见的空格(制表符、空格等)。

标签: shell unix pipe uniq


【解决方案1】:

uniq 仅检测连续行中的重复项。惯用的成语 是sort | uniq,以确保所有重复项将一起出现。

【讨论】:

  • 您还可以使用-u 选项到sort 让它在运行时删除欺骗。
【解决方案2】:

uniq要求重复项相邻,也就是说你需要对输入进行排序,也就是说你不妨使用sort -u;

find 2012 -type f | cut -d/ -f5 | sort -u

【讨论】:

    猜你喜欢
    • 2010-10-29
    • 1970-01-01
    • 1970-01-01
    • 2011-02-04
    • 2012-06-09
    相关资源
    最近更新 更多