【问题标题】:What is the difference between sort data.txt | uniq -q and just 'uniq -q'?排序 data.txt | 有什么区别? uniq -q 和 'uniq -q'?
【发布时间】:2020-02-10 10:03:06
【问题描述】:

我知道它是排序的,并且输出用于找出文件中的唯一语句。我也觉得 uniq -u 应该打印文件中的每个唯一语句。

uniq -u data.txt

这条语句的输出是:

MsxcvOe3PGrt78wpZG2bBNF5wfXpZhET
L0nxAwlfV9V3J5onKIT8KYQ9InTcQ7yE
4c7EsUtqLnLR9hiepV5EQVhdMgyi8onL
1drBmDT7PYS7hVgoTWkJSjUZUK7ZAIAa
L0nxAwlfV9V3J5onKIT8KYQ9InTcQ7yE
78rgduVcLZjLzZmooObdaN541MKV6IfQ
x0bga8Oxz5lgM8k52HrYy4ez7XJI0lM0
irGm6F73sbUrFhHukhp6JXgMQyLxJTz1

但是当我运行时

sort data.txt | uniq -u

输出是: UsvVyFSfZZWbi6wgC7dAFyFuR62324324324

我无法理解为什么只有一行输出时第一条语句会打印一个列表。

【问题讨论】:

    标签: linux ubuntu terminal uniq


    【解决方案1】:

    Uniq 只比较相邻的行。因此,以下输入上的 uniq -u 不会检测到重复并打印出所有内容

    foo
    bar
    foo
    bar
    

    如果你先调用 sort,你会得到一个正确去重的排序列表。您可能在文件后面有一些重复项

    【讨论】:

      【解决方案2】:

      uniq 实用程序读取指定的输入文件并仅比较相邻行并将每个唯一输入行的副本写入输出文件。

      例如,如果您的数据是:

      1
      1
      2
      5
      4
      1
      

      uniq -u data 的输出将是:

      2
      5
      4
      1
      

      sort data | uniq -u 的输出如下:

      排序输出:

      1 
      1
      1
      2
      4
      5
      

      当它被传递给uniq -u 时,输出将是:

      2
      4
      5
      

      【讨论】:

        猜你喜欢
        • 2016-02-28
        • 1970-01-01
        • 1970-01-01
        • 2022-07-07
        • 2011-10-14
        • 1970-01-01
        • 2011-06-11
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多