gawk 部分交叉引用

gawk 部分交叉引用

所以目前我有这个脚本

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

相关内容