Awk 基于2列替换列匹配中的velues

Awk 基于2列替换列匹配中的velues,awk,Awk,我有一个文件f1,看起来像这样:(有1651行) 我有文件f2,看起来像(有1651行) 我想替换f1中的第6列,使其与f2 os的第3列相匹配,第1列和第2列与之匹配 输出如下所示: fam0110 G110 0 0 0 2 T G fam6106 G6106 0 0 0 1 T T fam1000 G1000 0 0 0 1 T T 我试着用: awk 'FNR==NR{a[NR]=$3;next}{$6=a[FNR]}1' pheno_laser2 chr9.plink.ped >

我有一个文件f1,看起来像这样:(有1651行)

我有文件f2,看起来像(有1651行)

我想替换f1中的第6列,使其与f2 os的第3列相匹配,第1列和第2列与之匹配

输出如下所示:

fam0110 G110 0 0 0 2 T G
fam6106 G6106 0 0 0 1 T T
fam1000 G1000 0 0 0 1 T T
我试着用:

awk 'FNR==NR{a[NR]=$3;next}{$6=a[FNR]}1' pheno_laser2 chr9.plink.ped > chr9.new.ped
但是这不起作用,因为行的排序方式不同,所以我需要通过两个文件中第一列和第二列中的值进行匹配

请告知
这不起作用,因为您只需要在哈希中使用前两个字段,因为您只想匹配它们,而不想匹配行号或其他任何内容

awk 'FNR==NR{a[$1, $2]=$3;next} {$6=a[$1, $2]}1' file2 file1
使用您的示例进行测试:

fam0110 G110 0 0 0 2 T G
fam6106 G6106 0 0 0 1 T T
fam1000 G1000 0 0 0 1 T T
请注意,它会为任何不匹配的行打印空字段,我认为这是可以的

awk 'FNR==NR{a[$1, $2]=$3;next} {$6=a[$1, $2]}1' file2 file1
fam0110 G110 0 0 0 2 T G
fam6106 G6106 0 0 0 1 T T
fam1000 G1000 0 0 0 1 T T