Unix uniq实用程序:这段代码有什么问题?

时间:2010-06-26 17:56:38

标签: unix

我想要完成的任务:print duplicated lines

这就是uniq男人所说的:

SYNOPSIS

uniq [OPTION]... [INPUT [OUTPUT]]

DESCRIPTION

Discard all but one of successive identical lines from INPUT (or stan-
dard input), writing to OUTPUT (or standard output).

...

-d, --repeated
  only print duplicate lines

这是我尝试执行的内容:

root@laptop:/var/www# cat file.tmp 
Foo
Bar
Foo
Baz
Qux
root@laptop:/var/www# cat file.tmp | uniq --repeated
root@laptop:/var/www# 

所以我在这个例子中等待Foo,但它什么也没有返回.. 这个片段有什么问题?

5 个答案:

答案 0 :(得分:4)

uniq仅检查连续的行。例如,如果一行中有两条或更多条Foo行,您只能看到打印的内容。

如果您想绕过它,请先使用sort对文件进行排序。

$ sort file.tmp | uniq -d
Foo

如果您确实需要按照文件中出现的顺序打印所有非连续重复行,则可以使用awk

$ awk '{ if ($0 in lines) print $0; lines[$0]=1; }' file.tmp

但是对于大文件,效率可能低于sortuniq。 (可能 - 我还没试过。)

答案 1 :(得分:2)

cat file.tmp |排序| uniq - 重复

sort file.tmp | uniq - 重复

答案 2 :(得分:1)

cat file.tmp | sort | uniq --repeated

需要对行进行排序

答案 3 :(得分:1)

uniq在相邻的线路上运行。你想要的是

cat file.tmp | sort | uniq --repeated

在OS X上,我实际上会有

sort file.tmp | uniq -d

答案 4 :(得分:1)

我自己从未尝试过,但我认为“连续”这个词是关键。

如果在对uniq运行输入之前对输入进行排序,这可能会有效。

这样的东西
sort file.tmp | uniq -d