Unix Uniq Utility: что не так с этим кодом? - PullRequest
0 голосов
/ 26 июня 2010

Чего я хочу достичь: print duplicated lines

Это то, что uniq man говорит:

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 ]

4 голосов
/ 26 июня 2010

uniq только проверяет последовательных строк друг против друга. Таким образом, вы можете ожидать увидеть что-то напечатанное, только если в строке две или более строки Foo, например.

Если вы хотите обойти это, сначала отсортируйте файл с sort.

$ sort file.tmp | uniq -d
Foo

Если вам действительно нужно распечатать все непоследовательные повторяющиеся строки в порядке их появления в файле, вы можете использовать awk для этого:

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

, но для большого файла это может быть менее эффективно, чем sort и uniq. ( Может быть - я не пробовал.)

2 голосов
/ 26 июня 2010

cat file.tmp |сортировать |uniq - повтор

или

sort file.tmp |uniq - повтор

1 голос
/ 26 июня 2010

Я никогда не пробовал это сам, но я думаю, что слово "последовательный" является ключом.

Это, вероятно, сработает, если вы отсортируете ввод перед запуском uniq над ним.

Что-то вроде

sort file.tmp | uniq -d
1 голос
/ 26 июня 2010

uniq работает на соседних линиях. что вы хотите, это

cat file.tmp | sort | uniq --repeated

На OS X у меня действительно было бы

sort file.tmp | uniq -d

1 голос
/ 26 июня 2010
cat file.tmp | sort | uniq --repeated

строки должны быть отсортированы

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...