sed / awk + regex удаляет дубликаты строк, где совпадает первое поле - PullRequest
3 голосов
/ 13 февраля 2012

Мне нужно решение для удаления дублирующихся строк, где первое поле - это адрес IPv4. Например, у меня есть следующие строки в файле:

192.168.0.1/text1/text2
192.168.0.18/text03/text7
192.168.0.15/sometext/sometext
192.168.0.1/text100/ntext
192.168.0.23/othertext/sometext

Таким образом, все, что совпадает в предыдущем сценарии, это IP-адрес. Я знаю только то, что регулярное выражение для IP-адреса:

\b\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\b

Было бы неплохо, если бы решение было одной строкой и как можно быстрее.

Ответы [ 3 ]

6 голосов
/ 13 февраля 2012

Если файл содержит строки только в указанном вами формате, т.е. первое поле всегда является IP-адресом, вы можете выбрать одну строку awk:

awk '!x[$1]++' FS="/" $PATH_TO_FILE

РЕДАКТИРОВАТЬ: Это удаляет дубликаты на основе только на IP-адресе.Я не уверен, что именно этого хотел ОП, когда писал этот ответ.

0 голосов
/ 17 мая 2014

Привет, который Арджун Шанкар опубликовал, сотворил для меня чудеса.

У меня был огромный список предметов, в котором было несколько копий в поле 1, и специальный порядковый номер в поле 2. Мне требовалось «самое новое» или наибольшее последовательное число из каждого уникального поля 1.

Мне пришлось использовать sort -rn, чтобы подтолкнуть их к позиции «первая запись», поскольку первым шагом является запись, а затем сравнить следующую запись, в отличие от получения последней / самой последней в списке.

Спасибо, Арджун Шанкар!

0 голосов
/ 13 февраля 2012

Если вам не нужно сохранять исходный порядок, один из способов сделать это - использовать sort:

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