如何使用awk基于公共字符串(不同列号)合并文件

如何使用awk基于公共字符串(不同列号)合并文件,awk,merge,Awk,Merge,文件1: 文件2: 000001 c-2-3 p045 238744 000001 c-2-4 p042 439709 000002 c-2-4 p055 234744 000003 c-2-5 p099 956755 000004 c-2-9 p064 504435 000005 c-1-5 p043 384029 000006 c-2-2 p011 434444 000009 c-1-3 p083 035905 以下awk命令: 000001 1 0 0 rs333 HESN 000002

文件1:

文件2:

000001 c-2-3 p045 238744
000001 c-2-4 p042 439709
000002 c-2-4 p055 234744
000003 c-2-5 p099 956755
000004 c-2-9 p064 504435
000005 c-1-5 p043 384029
000006 c-2-2 p011 434444
000009 c-1-3 p083 035905
以下awk命令:

000001 1 0 0 rs333 HESN
000002 1 0 0 rs333 POS
000003 1 0 0 rs333 POS
000004 0 1 0 rs333 POS
000005 0 0 1 rs333 NEG
000008 1 0 0 rs333 POS
生成以下文件:

文件3:

awk 'NR==FNR {h[$1] = $0; next} {print $1,$2,$3,$4,h[$1]}' file2 file1 > file3
然而,file1实际上看起来是这样的:

文件1b:

000001 c-2-3 p045 238744 000001 1 0 0 rs333 HESN
000001 c-2-4 p042 439709 000001 1 0 0 rs333 HESN
000002 c-2-4 p055 234744 000002 1 0 0 rs333 POS
000003 c-2-5 p099 956755 000003 1 0 0 rs333 POS
000004 c-2-9 p064 504435 000004 0 1 0 rs333 POS
000005 c-1-5 p043 384029 000005 0 0 1 rs333 NEG
000006 c-2-2 p011 434444
000009 c-1-3 p083 035905
如何更改awk命令以接受file1b(而不是file1)并获得相同的输出(file3)。另外,如何排除文件3(即第5列)中的冗余信息

使用file1b和file2的所需输出:

c-2-3 p045 238744 000001
c-2-4 p042 439709 000001
c-2-4 p055 234744 000002
c-2-5 p099 956755 000003
c-2-9 p064 504435 000004
c-1-5 p043 384029 000005
c-2-2 p011 434444 000006
c-1-3 p083 035905 000009

谢谢

awk
救援

000001 c-2-3 p045 238744 1 0 0 rs333 HESN
000001 c-2-4 p042 439709 1 0 0 rs333 HESN
000002 c-2-4 p055 234744 1 0 0 rs333 POS
000003 c-2-5 p099 956755 1 0 0 rs333 POS
000004 c-2-9 p064 504435 0 1 0 rs333 POS
000005 c-1-5 p043 384029 0 0 1 rs333 NEG
000006 c-2-2 p011 434444
000009 c-1-3 p083 035905

这里使用了一些微妙的技巧来简化代码…

感谢您的回复。如何更改命令以排除file1b中与file2不匹配的行?i、 e.排除期望输出(文件3)中的000006 c-2-2 p011 434444和000009 c-1-3 p083 035905行。它们作为期望输出存在于您的原始问题中?!如果要删除它们,请将此条件放在a中的第二条语句
$NF之前。是的,这次是新的所需输出。调整很好,谢谢!
awk 'NR==FNR {k=$1; $1=""; a[k]=$0; next} 
             {k=$NF; NF--; print k,$0 a[k]}' file2 file1b 

000001 c-2-3 p045 238744 1 0 0 rs333 HESN
000001 c-2-4 p042 439709 1 0 0 rs333 HESN
000002 c-2-4 p055 234744 1 0 0 rs333 POS
000003 c-2-5 p099 956755 1 0 0 rs333 POS
000004 c-2-9 p064 504435 0 1 0 rs333 POS
000005 c-1-5 p043 384029 0 0 1 rs333 NEG
000006 c-2-2 p011 434444
000009 c-1-3 p083 035905