LINUX.ORG.RU

coreutils: почему uniq имплементирован только для соседних строк?

 


0

1

Привет

neko@takinowork:~/test$ echo -e "a\nb\nc\na\ne\nf\ne"|uniq
a
b
c
a
e
f
e
neko@takinowork:~/test$ echo -e "a\nb\nc\na\ne\nf\ne"|sort|uniq
a
b
c
e
f
Да, все верно:

Filter adjacent matching lines from INPUT (or standard input), writing to OUTPUT (or standard output).

А почему так сделано?

★★★★★

Потому, что так код будет проще и работать будет быстрее, т.к. не нужно будет пробегать по всему входному массиву данных для поиска одинаковых строк. В то же самое время в uniq не встроена функция предварительной сортировки, т.к. он написан по принципе KISS («keep it simple, stupid»), поэтому, если нужно необходимо сортировать данные утилитой sort.

kostik87 ★★★★★
()
Ответ на: комментарий от kostik87

-u, --unique
with -c, check for strict ordering; without -c, output only the first of an equal run

Но вот так же сорт умеет зачем-то вместо uniq.

Но в общем спасибо, окей.

takino ★★★★★
() автор топика
Последнее исправление: takino (всего исправлений: 2)

не ответ, но есть awk '!a[$0]++'

anonymous
()

А почему так сделано?

а потому что так намного быстрее. Если тебе нужно для не соседних — ты можешь sort натравить, а если НЕ нужно?

emulek
()
Ответ на: комментарий от IPR

ви таки не поверите

neko@takinowork:~/test$ echo 'uniq -u' > first.txt
neko@takinowork:~/test$ echo 'sort -u' > second.txt
neko@takinowork:~/test$ diff first.txt second.txt 
1c1
< uniq -u
---
> sort -u
takino ★★★★★
() автор топика
Ответ на: комментарий от emulek

Какие у тебя, членососа, могут быть «дела»?

anonymous
()
Ответ на: комментарий от IPR

перичитай диалог с первого сообщения до текущего, лол.

takino ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.