如果列中的值与单独列表中的值匹配,则删除行

时间:2019-05-14 12:52:00

标签: awk

我有一个这样的文件:

george@mail.com|george|Sutherland|Manchester|England
marcel@email.com|Marcel|ZIDANE|Marseille|France
some@gmail.com|Simon|surname|Somewhere|Else

以及电子邮件列表:

ty230923@hotmail.com
marcel@email.com
email@anothermail.com

我想从文件1的所有行中删除所有包含在文件2的第一列中的电子邮件的行。预期输出如下:

george@mail.com|george|Sutherland|Manchester|England
some@gmail.com|Simon|surname|Somewhere|Else

我需要一个可以大规模使用的解决方案(1亿条线路)。尝试了grep解决方案,但经过数小时的运行仍然没有结果。有人建议AWK可能是要走的路。

在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在Python中,您可以将pandas库与merge函数一起使用以获得所需的内容。使用熊猫缩放比例应该没有任何问题。

这是解决问题的方法:

import pandas

In [1] : df = pd.DataFrame({'e-mail': ['a@hotmail.fr', 'b@hotmail.fr', 'c@hotmail.fr'], "Name": ['Bob', 'Alice', 'Britney']})
Out[1] :
Name    e-mail
0   Bob a@hotmail.fr
1   Alice   b@hotmail.fr
2   Britney c@hotmail.fr

In [2] : df2 = pd.DataFrame({'e-mail' : ['a@hotmail.fr', 'd@hotmail.fr']})
Out[2] :
e-mail
0   a@hotmail.fr
1   d@hotmail.fr

In [3] : df_ final = df.merge(df2, indicator='i', how='outer').query('i == "left_only"').drop('i', 1)

In [4]: df_final.head()
Out[4]: 
Name    e-mail
1   Alice   b@hotmail.fr
2   Britney c@hotmail.fr