uniq -u 的意义是什么?它有什么作用?

uniq -u 的意义是什么?它有什么作用?

uniq似乎做了一些与 不同的事情uniq -u,尽管两者的描述都是“只有独特的线条”。

这里有什么区别,他们做什么?

答案1

这应该很容易测试:

$ cat file
1
2
3
3
4
4
$ uniq file
1
2
3
4
$ uniq -u file
1
2

简而言之,uniq如果不使用任何选项,则会删除除一个连续重复行实例之外的所有实例。 GNUuniq手册规定为

如果没有选项,匹配的行将合并到第一次出现的位置。

尽管POSIX 说

[...] 在输出上写入每个输入行的一份副本。重复的相邻输入行的第二个和后续副本不应被写入。

使用该-u选项,它会删除全部连续重复行的实例,并且仅留下从未重复的行。 GNUuniq手册说

只打印唯一的行

POSIX 说

禁止写入输入中重复的行。

答案2

独特(1):

NAME
  uniq - report or omit repeated lines
DESCRIPTION
  ...
  With no options, matching lines are merged to the first occurrence.
  ...
  -u, --unique
         only print unique lines

如果我们尝试一下,我们会看到:

$ cat file
cat
dog
dog
bird
$ uniq file
cat
dog
bird
$ uniq -u file
cat
bird

您可以看到uniq打印了重复行的第一个实例。 uniq -u不打印任何重复的行。

答案3

考虑到原始发帖者对已接受答案的评论,我相信不同的示例可能有助于说明命令的差异和要点。

假设我们有一部分文本,由于某种原因,其中的行之间有重复的空行,并且在开头和结尾都有一个空行:

$ cat declaration_quote.txt

We hold these truths to be self-evident, that all men are created equal, that


they are endowed by their Creator with certain unalienable Rights, that among


these are Life, Liberty and the pursuit of Happiness.

如果您确定一个空行足够间距,您可以uniq使用

  • 上面和下面不重复的每一行(这里有文本的行以及开头和结尾的单个空行)和
  • 每组相邻重复行中的一行(这里是空行,除了开头和结尾的一行)。

它不是 ”一切都只有一次“, 反而 ”每个连续组一次因为您将从每组空行中收到一个单独的空行。这已经不止一次了。此外,开头和结尾的空行会保留,因为紧邻上方或下方没有空行。

$ uniq declaration_quote.txt 

We hold these truths to be self-evident, that all men are created equal, that

they are endowed by their Creator with certain unalienable Rights, that among

these are Life, Liberty and the pursuit of Happiness.

如果您决定根本不需要这样的双倍行距,则可以使用 来uniq -u仅获取上面或下面的行中不立即重复的每一行。但仍然不是“只出现一次的东西“因为它不会删除单个空行(在开头和结尾),即使文本中还有许多其他空行。它是”只做不立即重复的事情”。

$ uniq -u declaration_quote.txt

We hold these truths to be self-evident, that all men are created equal, that
they are endowed by their Creator with certain unalienable Rights, that among
these are Life, Liberty and the pursuit of Happiness.

相关内容