![合并两个文件中相同参数的值](https://linux22.com/image/12787/%E5%90%88%E5%B9%B6%E4%B8%A4%E4%B8%AA%E6%96%87%E4%BB%B6%E4%B8%AD%E7%9B%B8%E5%90%8C%E5%8F%82%E6%95%B0%E7%9A%84%E5%80%BC.png)
我们有两个文件 -primary.txt
和secondery.txt
在这两个文件上,我们有相同的参数,但secondary.txt
它们的顺序不一样primary.txt
more primary.txt
param.avarge.com 3443
param.no.com 43
param.lol.com 54
param.tis.com 24
param.er.com 254
param.nh.com 13
param.pl.com 456
param.nm.com 534
param.asd.com 236
more secondery.txt
param.no.com 42
param.lol.com 51
param.tis.com 21
param.avarge.com 343
param.er.com 259
param.nh.com 131
param.pl.com 45
param.nm.com 50
param.asd.com 23
我们希望将这些secondery.txt
值与primary.txt
以下值合并:
more merge.txt
param.avarge.com 3443 343
param.no.com 43 42
param.lol.com 54 51
param.tis.com 24 21
param.er.com 254 259
param.nh.com 13 131
param.pl.com 456 45
param.nm.com 534 50
param.asd.com 236 23
如果我们得到这方面的建议,我将不胜感激,所以我将更新我的 bash 脚本中的解决方案
答案1
如果这一切都适合记忆的话
awk 'NR==FNR { s[$1]=$2 ; next }
{ print $0,s[$1] }' secondary.txt primary.txt
NR==FNR 是一个技巧,它告诉您是否正在处理第一个文件(假设第一个文件不为空)。如果它是第一个文件,则将第二列的值存储到关联数组中,然后移至下一行。如果我们不继续,那么我们必须处理第二个文件,因此打印出主文件中的值和存储的值。