我有两个以下格式的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万行以上)。你知道吗
提前谢谢。你知道吗
awk中的另一个:
输出:
在处理第二个文件时
file2
gsub(/\*+/,".*",$4)
试图使电子邮件regexish:s*****1@g*l.com
->;s.*1@g.*l\.com
。提供的示例数据除了*
和.
之外没有任何其他regex元字符,但是其他的(比如+
)可能也应该转义,以避免错误匹配,但是我不确定是否对它们有特殊意义,就像对*
。你知道吗而且,它不允许在
file1
中出现重复的名称。最后一个实例获胜。你知道吗假设您希望将
*
的任何重复处理为与regexp中处理.*
相同的方式,并将每个其他RE元字符(例如.
)按字面方式处理,并且^
不能出现在电子邮件地址中:我认为第一个
csv
文件是df1
,而第二个csv
文件是df2
。所以,你可以试试这个:输出:
相关问题 更多 >
编程相关推荐