我有两个文件,一个文件中包含电子邮件(useremail.txt),另一个文件中包含电子邮件:phonenumber(emailnumber.txt)。
useremail.txt包含:
John smith:blabla@hotmail.com
David smith:haha@gmail.com
emailnumber.txt包含:
blabla@hotmail.com:093748594
因此,该解决方案需要从useremail的第二列中获取电子邮件,然后搜索emailnumber文件并找到匹配项并输出John smith:093748594,因此只需输入姓名和电话号码即可。
我在Windows上,所以我需要一个gawk或grep解决方案,我已经尝试了很长时间,试图使其与awk / grep一起使用,但是找不到正确的解决方案,我们将不胜感激。
答案 0 :(得分:1)
您可以尝试以下方法:
awk -F":" '(FNR==NR){a[$2]=$1}(FNR!=NR){print a[$1]":"$2}' useremail.txt emailnumber.txt
如果emailnumber.txt
中有条目,而useremail.txt
中没有匹配条目:
awk -F":" '(FNR==NR){a[$2]=$1}(FNR!=NR){if(a[$1]){print a[$1]":"$2}}' useremail.txt emailnumber.txt
答案 1 :(得分:1)
另一个(GNU)awk:
$ awk '
BEGIN {
# RS=ORS="\r\n" # since you are using GNU awk this replaces the sub()
FS=OFS=":" # input and output field separators
}
NR==FNR { # processing the first file
sub(/\r$/,"",$NF) # remove the \r after the email OR uncomment RS above
a[$2]=$1 # hash name, index on email
next # on to the next record
}
($1 in a) { # if email in second file matches one in hash
print a[$1],$2 # output. If ORS uncommented above, output ends in \r
# if not, you may want to add it to the print ... "\r"
}' useremail emailnumber
输出:
John smith:093748594
由于您在Linux和Windows上尝试了可接受的答案,并且使用了GNU awk,因此将来可以设置RS="\r?\n"
,它接受两种形式,\r\n
和裸\n
。但是,我最近在特定条件下遇到了该表格的问题(对此我尚未提交错误报告)。