【发布时间】:2019-09-27 21:49:04
【问题描述】:
我有两个这些格式的 CSV 文件:
==
FirstName | LastName | Email
Steven | Smith | stevesmith1@gmail.com
Jane | Brown | jb155@yahoo.com
Paul | Gibson | paulgibbs@outlook.com
==
ID | FirstName | LastName | IncompleteEmail
1028332982 | Steven | Smith | s*****1@g*l.com
1028820233 | Jane | Brown | j******n@yahoo.com
934943823 | Paul | Gibson | p*****s@h****l.com
==
我想在此基础上匹配两个 CSV 文件 - 如果 FirstName 和 LastName 相同,则第一个 CSV 中的 Email 匹配第二个 CSV 中的 IncompleteEmail 的模式,应创建包含ID | Email的输出
在上面的示例中,输出如下所示:
ID | Email
1028332982 | stevesmith1@gmail.com
这是因为“Steve”和“Smith”在两个 CSV 中相同,并且 IncompleteEmail 模式与电子邮件匹配。其他输入不匹配,因为IncompleteEmail 模式与电子邮件不匹配。
我以前使用过join 脚本(例如join -i -t '|' -j 1 -o 2.2,2.3 1.txt 2.txt > out.txt)来处理类似的文件,但我不知道如何修改连接脚本以使用模式而不是完全匹配。我知道 AWK 可能会采用类似的方法,但我愿意接受建议。
需要可以处理大量输入的东西(两个 CSV,每个 1000 万行以上)。
提前致谢。
【问题讨论】:
-
您能解释一下
IncompleteEmail模式的工作原理吗? (还有 CSV?您的样本是 |- 分隔的,而不是逗号分隔的......) -
pattern这个词非常模糊和模棱两可,因此最好避免使用。话虽如此,我没有看到正则表达式匹配,也没有看到*是通配符的 char-for-char 匹配,也没有我熟悉的其他任何东西 - 这些“模式”到底是什么?在您的数据中,每个|的每一侧是否有真的 空白字符?如果没有,请修复您的示例,使其看起来像您的真实数据。 -
这实际上是我的问题,现在真实数据的 | 两边都没有空格——我把它们放进去让它看起来更清晰。
-
不要发布看起来不像你的真实数据的样本数据,因为它具有完全相反的效果,你最终得到的解决方案要么不起作用,要么不起作用不是最适合您的真实数据。
标签: python bash shell join awk