所以目前我有这个脚本
gawk -F: '
FNR==NR{a[$1][$2]=1;next}
$2 in a{for(i in a[$2]) print $1 FS i}
' email.phone.txt name.email.txt
电子邮件.电话内容示例:
[email protected]:012345
[email protected]:912345
name.email.txt 示例:
Charles:[email protected]
Erica:[email protected]
这将输出
Charles:012345
Charles:912345
Erica:012345
Erica:912345
如您所见,它当前检查 2 个文件并将email.phone.txt
第一列与name.email.txt
第二列进行匹配。如果它们匹配,则将输出name.email.txt
第一列和email.phone.txt
第二列,并用作:
分隔符。
我怎样才能做到这一点来匹配部分字符串?
就像这样,
电子邮件.电话内容示例:
[email protected]:012345
name.email.txt 示例:
Charles:Email@gm
现在的预期输出是
Charles:012345
Charles:912345
答案1
一种解决方案是读取电子邮件然后正则表达式匹配电话号码即时:
$ cat email.txt
Charles:Charles@gm
Erica:[email protected]
$ cat tele.txt
[email protected]:012345
[email protected]:912345
$ awk -F ':' 'NR==FNR{ em[$1]=$2 } NR!=FNR{ for(i in em){
if( $1 ~ em[i] ){ print i":"$2 } } }' email.txt tele.txt
Charles:012345
Erica:912345