В чем разница между сортировкой data.txt | uniq -q и просто 'uniq -q'? - PullRequest
0 голосов
/ 10 февраля 2020

Я понимаю, что это сортирует, и этот вывод используется для определения уникального оператора в файле. Я также считаю, что uniq -u должен печатать каждое уникальное утверждение в файле.

uniq -u data.txt

Вывод этого оператора:

MsxcvOe3PGrt78wpZG2bBNF5wfXpZhET
L0nxAwlfV9V3J5onKIT8KYQ9InTcQ7yE
4c7EsUtqLnLR9hiepV5EQVhdMgyi8onL
1drBmDT7PYS7hVgoTWkJSjUZUK7ZAIAa
L0nxAwlfV9V3J5onKIT8KYQ9InTcQ7yE
78rgduVcLZjLzZmooObdaN541MKV6IfQ
x0bga8Oxz5lgM8k52HrYy4ez7XJI0lM0
irGm6F73sbUrFhHukhp6JXgMQyLxJTz1

Однако, когда я запускаю

sort data.txt | uniq -u

Вывод: UsvVyFSfZZWbi6wgC7dAFyFuR62324324324

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

Ответы [ 2 ]

3 голосов
/ 10 февраля 2020

Uniq сравнивает только соседние строки. Поэтому uniq -u на следующем входе не будет обнаруживать дубликаты и распечатывать все

foo
bar
foo
bar

Если вы сначала вызовете сортировку, вы получите отсортированный список, который корректно дедуплицирован. Возможно, у вас есть несколько копий позже в файле

0 голосов
/ 10 февраля 2020

Утилита uniq читает указанный входной файл и сравнивает только соседние строки и записывает копию каждой уникальной входной строки в выходной файл.

Например, если ваши данные:

1
1
2
5
4
1

Вывод uniq -u data будет:

2
5
4
1

Тогда как вывод для sort data | uniq -u будет следующим:

Вывод сортировки:

1 
1
1
2
4
5

И когда это передано uniq -u, результат будет:

2
4
5
...