【问题标题】:Why does sort -u give different output from sort filename | uniq -u?为什么 sort -u 给出与排序文件名不同的输出 |唯一的-u?
【发布时间】:2014-11-29 23:44:45
【问题描述】:

我得到以下命令的两个不同结果。想知道这些命令之间的区别。 我想在文件中列出唯一行(删除重复项)。为了解决这个问题,我使用了以下命令。

sort -u filename

sort filename|uniq -u

我得到了两个不同的结果。谁能解释一下区别。

也试过这个命令。除了以上两个之外,又得到了一组新的结果。

cat filename|uniq -u.

【问题讨论】:

  • 请提供重现问题的最小输入文件。
  • 另外,定义活动区域设置——排序顺序和行为因本地化设置而异。如果您可以使用export LC_ALL=C 重现该行为,那就更好了。
  • @KarolyHorvath 这是下载我测试过的文本文件的保管箱链接。 dropbox.com/s/kqw19g1wxjsqhxj/abc.txt?dl=0
  • @all。尝试使用 wc -l command ,它会显示两个命令之间的行数差异。

标签: linux sorting cat uniq


【解决方案1】:

我使用的文件:

zsh/6 31167 % cat do_sortowania  
Marcin
Tomek
Marcin
Wojtek
Zosia
Zosia
Marcin
Krzysiek

使用排序:

zsh/6 31168 % sort -u do_sortowania 
Krzysiek
Marcin
Tomek
Wojtek
Zosia

但使用 sort + uniq:

zsh/6 31170 % sort do_sortowania|uniq -u
Krzysiek
Tomek
Wojtek

现在:两个答案: 简短:

zsh/6 31171 % sort do_sortowania|uniq -c
      1 Krzysiek
      3 Marcin
      1 Tomek
      1 Wojtek
      2 Zosia

长: 如您所见,quniq -u 仅返回仅出现一个的行:Krzysiek、Tomek、Wojtek。
Zosia 和 Marcin 出现了 3 和 2 次,所以 uniq -u 忽略它们。

附言

zsh/6 31172 % cat do_sortowania|uniq -u
Marcin
Tomek
Marcin
Wojtek
Marcin
Krzysiek

因为,sort 应该只适用于已排序的文件,所以:

Marcin
Marcin
Tomek

将是uniqued to

Marcin
Tomek

但是

Marcin
Tomek
Marcin

不会,因为排序只会将行与下一行进行比较,因为它相信文件已排序。

【讨论】:

    【解决方案2】:

    按列表中的无重复条目排序:

    sort -u filename
    

    |命令的管道输出是否排序为 uniq,使用 -u 的女巫,只打印唯一的行

    sort filename|uniq -u
    

    在大多数情况下,这是大多数用户的正确选项

    sort -u filename
    

    关于排序的 ubuntu 信息:http://manpages.ubuntu.com/manpages/precise/en/man1/sort.1.html

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-25
      • 1970-01-01
      相关资源
      最近更新 更多