如何确定特定字符后每一行的唯一性?
How can I determine uniqueness of each line after a certain character?
我有一个这样的电子邮件列表:
- 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 但它似乎不支持在确定唯一性之前跳到 @ 字符。
分解问题,您似乎只想保留每个域的第一个地址。为此,您首先获得一个唯一的域列表,然后使用 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
我有一个这样的电子邮件列表:
- 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 但它似乎不支持在确定唯一性之前跳到 @ 字符。
分解问题,您似乎只想保留每个域的第一个地址。为此,您首先获得一个唯一的域列表,然后使用 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