我想要完成的任务: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
,但它什么也没有返回..
这个片段有什么问题?
答案 0 :(得分:4)
uniq
仅检查连续的行。例如,如果一行中有两条或更多条Foo
行,您只能看到打印的内容。
如果您想绕过它,请先使用sort
对文件进行排序。
$ sort file.tmp | uniq -d
Foo
如果您确实需要按照文件中出现的顺序打印所有非连续重复行,则可以使用awk
:
$ awk '{ if ($0 in lines) print $0; lines[$0]=1; }' file.tmp
但是对于大文件,效率可能低于sort
和uniq
。 (可能 - 我还没试过。)
答案 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