通过图案提取独特的线条

时间:2018-10-26 01:41:45

标签: regex bash unix

希望问bash正则表达式问题。我需要从列表中打印出唯一的行。 此列表包含电子邮件,其中一些重复了很多次,其中一些具有相同的ID和密码,但具有不同的邮件帐户。

列表如下:

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 :(得分:0)

如果翻转周围的字段,则可以使用--skip-fields=1(或-f 1)仅考虑电子邮件的唯一性。

答案 1 :(得分:0)

您可以改用以下awk命令:

awk -F@ '!s[$1]{s[$1]=1;print}' filename

答案 2 :(得分:0)

使用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]++'项,则条件$1,$3告诉AWK打印该行。