Awk-使用多列比较两个文件并打印两个文件中的行

Awk-使用多列比较两个文件并打印两个文件中的行

所以我有两个平面文件,格式如下

文件1.txt

Customer1 12345 12346 12347 15646
Customer2 14444 14445

文件2.txt

12345 aol.com
12347 gmail.com
12346 google.com
14444 yahoo.com
14445 outlook.com
15646 space.com

我的期望输出是:

Customer1 aol.com gmail.com google.com space.com
Customer2 yahoo.com outlook.com

到目前为止我已经想到了以下内容,但它似乎只使用文件 1 中的第 2 列,我是否可以扩展此命令以包含文件 1 中的所有列?

awk 'NR==FNR {a[$1]=$2; next} $2 in a {print $0, a[$2]}' OFS='\' file2.txt file1.txt

答案1

您将需要循环遍历$2以下字段File1.txt

$ awk 'NR==FNR {a[$1]=$2; next} {for (i=2;i<=NF;i++) $i = $i in a ? a[$i] : $i} 1' File2.txt File1.txt
Customer1 aol.com google.com gmail.com space.com
Customer2 yahoo.com outlook.com

如果您确定会有匹配,或者您想用空字段替换不匹配,则$i = $i in a ? a[$i] : $i可以简化为。$i = a[$i]

相关内容