Извлекать уникальные линии по шаблону - PullRequest
0 голосов
/ 26 октября 2018

хочу задать вопрос bash regex.Мне нужно напечатать уникальные строки из списка.Этот список содержит электронные письма, и некоторые из них повторяются много раз, а также некоторые из них имеют одинаковый идентификатор и пароль, но разные учетные записи.

Список выглядит следующим образом:

firstman@gmail.com:pass1234
someguy@yahoo.com:onepass789
secondman@gmail.com:looksPass
firstman@yahoo.com:pass1234
thirdman@cox.net:mypas345
someguy@mail.com:onepass789

firstman@someguy@ повторяется 2 раза, но с другими почтовыми провайдерами.

Мне нужно получить следующий вывод:

firstman@gmail.com:pass1234
someguy@yahoo.com:onepass789
secondman@gmail.com:looksPass
thirdman@cox.net:mypas345

uniq -u сделать эту работу только частично - она ​​сравнивает полную строку, вместо этого янужно сравнивать строки вне шаблона @emailprovider:.

Как "отбросить" этот шаблон при извлечении уникальных линий?

Ответы [ 3 ]

0 голосов
/ 26 октября 2018

Вместо этого вы можете использовать следующую команду awk:

awk -F@ '!s[$1]{s[$1]=1;print}' filename
0 голосов
/ 26 октября 2018

С помощью AWK вы можете сказать:

awk -F'[@:]' '!seen[$1,$3]++' inputlist

выход:

firstman@gmail.com:pass1234
someguy@yahoo.com:onepass789
secondman@gmail.com:looksPass
thirdman@cox.net:mypas345
  • -F'[@:]' устанавливает для разделителя полей либо "@", либо ":".
  • Затем $1 содержит строку перед «@», а $3 - после «:».
  • Условие '!seen[$1,$3]++' указывает AWK напечатать строку, если запись $1,$3не видел.
0 голосов
/ 26 октября 2018

Если вы перевернете поля вокруг, вы можете использовать --skip-fields=1 (или -f 1), чтобы рассматривать электронные письма только на предмет уникальности.

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