在简单情况下它们应该是等效的,但如果您使用选项-k仅定义输入行的某些字段以用作排序键,则它们的行为会有所不同。在这种情况下,即使行的其他部分不同,sort -u也会抑制具有相同键的uniq行,而只会抑制完全相同的行。
$ cat example
foo baz
quux ping
foo bar
$ sort -k 1,1 --stable example # use just the first word as sort key
foo baz
foo bar
quux ping
$ sort -k 1,1 --stable -u example # suppress lines with the same first word
foo baz
quux ping
Run Code Online (Sandbox Code Playgroud)
但
$ sort -k 1,1 --stable example | uniq
foo baz
foo bar
quux ping
Run Code Online (Sandbox Code Playgroud)
我不确定这是否与可用性有关。我见过的大多数系统都有sort,uniq因为它们通常由同一个包提供。我刚刚检查了 2001 年的 Solaris 系统,它是sort有这个-u选项。
从技术上讲,使用 Linux 管道(| ) 会启动一个子 shell,并且会消耗更多资源,因为它会从操作系统请求多个 pid。
如果您查看包中的源代码,您可以看到它实际上只是跳过打印重复项,因为它打印自己的排序列表,并且不使用独立代码sortcoreutilsuniq 。
要了解它是如何工作的,请点击排序源的链接并查看此评论下面的函数:
Run Code Online (Sandbox Code Playgroud)/* If uniquified output is turned on, output only the first of an identical series of lines. */
尽管我认为sort -u应该更快,但除非您运行的是大文件,否则性能提升实际上很小sort | uniq,因为它必须再次读取整个文件。