file1:
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
file2:
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
以下awk命令:
awk 'NR==FNR {h[$1] = $0; next} {print $1,$2,$3,$4,h[$1]}' file2 file1 > file3
生成以下文件:
file3:
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
但是,file1实际上如下所示:
file1b:
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命令以接受file1b (而不是file1)并获得相同的输出(file3)。此外,如何排除file3中的冗余信息(即第5列)?
使用file1b和file2所需的输出:
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
谢谢!!
发布于 2017-03-23 00:46:26
awk
去营救!
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
有一些微妙的技巧用来简化代码..。
https://stackoverflow.com/questions/42964249
复制相似问题