List 如何确定特定字符后每行的唯一性?

List 如何确定特定字符后每行的唯一性?,list,sorting,uniq,List,Sorting,Uniq,我有这样一个电子邮件列表: 名字_1@domain.com 名字_2@domain.com 名字_1@domain_2.com 名字_1@domain_3.com 名字_2@domain_3.com 名字_1@domain_4.com 如何删除基于域的所有重复电子邮件?所以在上面的例子中,我会删除这个名字_2@domain.com姓名_2@domain_3.com. 我知道如何使用uniq,但它似乎不支持在确定唯一性之前跳到@char。解决这个问题,看起来您只想保留每个域的第一个地址。要做到

我有这样一个电子邮件列表:

  • 名字_1@domain.com
  • 名字_2@domain.com
  • 名字_1@domain_2.com
  • 名字_1@domain_3.com
  • 名字_2@domain_3.com
  • 名字_1@domain_4.com
如何删除基于域的所有重复电子邮件?所以在上面的例子中,我会删除这个名字_2@domain.com姓名_2@domain_3.com.


我知道如何使用uniq,但它似乎不支持在确定唯一性之前跳到@char。

解决这个问题,看起来您只想保留每个域的第一个地址。要做到这一点,您首先获得一个唯一的域列表,然后使用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