Как я могу определить уникальность каждой строки после определенного символа?

У меня есть список адресов электронной почты, как это:

  • name_1@domain.com
  • name_2@domain.com
  • name_1@domain_2.com
  • name_1@domain_3.com
  • name_2@domain_3.com
  • name_1@domain_4.com

Как я могу удалить все дубликаты электронных писем в зависимости от домена? Поэтому в приведенном выше примере я бы удалил name_2@domain.com и name_2@domain_3.com.

Я знаю, как использовать uniq, но он не поддерживает переход к @ char до определения уникальности.

1 ответ

Решение

Разбивая проблему, похоже, вы хотите сохранить только первый адрес для каждого домена. Для этого вы сначала получите уникальный список доменов, а затем используйте head, чтобы сохранить только первый из них. Предполагая, что у вас есть эти адреса по одной строке в файле с именем unsorted.txt это можно сделать с помощью чего-то вроде:

#!/bin/sh
DOMAINS=$(cut -d@ -f2 unsorted.txt | sort | uniq)
for DOMAIN in $DOMAINS ; do
    grep $DOMAIN unsorted.txt | head -1
done
Другие вопросы по тегам