#linux #shell #dpkg
Вопрос:
У меня есть команда, которая выполняет запрос dpkg, чтобы узнать, какие версии Tomcat установлены в моей системе. Я пытаюсь получить уникальные значения и удалить дубликаты. Тем не менее, я все еще вижу дубликаты в своих выходных данных.
Команда:
dpkg-query -l | grep -Eo 'tomcat[0-9]?' | uniq
Выход:
tomcat8
tomcat9
tomcat8
tomcat9
Желаемый Результат:
tomcat8
tomcat9
Комментарии:
1.
uniq
работает только с отсортированными списками. Как люди указали нижеsort -u
, это хорошо подходит для этого, но если вы были настроены на использованиеuniq
, просто добавьте asort
послеgrep
и доuniq
.
Ответ №1:
От man uniq
:
Примечание: ‘uniq’ не обнаруживает повторяющиеся строки, если они не являются смежными. Возможно, вы захотите сначала отсортировать входные данные или использовать «sort-u» без «uniq». Кроме того, сравнения выполняются в соответствии с правилами, указанными в «LC_COLLATE».
Использование sort -u
будет сортировать и печатать только уникальные строки:
dpkg-query -l | grep -Eo 'tomcat[0-9]?' | sort -u
Ответ №2:
сортировка -u должна сработать.
Я тестировал с помощью простого текстового файла, но он работает так же, как и при конвейерном вводе.
$ cat /tmp/test.txt
tomcat8
tomcat9
tomcat8
tomcat9
С помощью sort -u
:
$ sort -u /tmp/test.txt
tomcat8
tomcat9
Использование uniq
дает те же результаты, которые вы испытывали:
$ uniq /tmp/test.txt
tomcat8
tomcat9
tomcat8
tomcat9
Ответ №3:
Используя один awk
, вы можете сделать это:
dpkg-query -l |
awk 'match($0, /tomcat[0-9]*/) amp;amp; !seen[s=substr($0, RSTART, RLENGTH)] {print s}'
tomcat8
tomcat9
Ответ №4:
aptitude search ~itomcat[0-9] | sort -u