所以我有兩個格式如下的平面文件
文件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]