输入文件是制表符分隔的,如下所示:
]2 71319482 71319483 71319483 MantaBND
8 17715051 17715052 17715052 MantaDEL
]5 137014789 137014790 137014790 MantaBND
8 34426251 34426252 34426252 MantaDEL
C]14 36674759 36674760 36674760 MantaBND
我使用了以下awk命令..
awk 'BEGIN {FS="\t";OFS="\t"} {if ($1 = /^].*/) {{split ($1,a,/]/);$10=a[1]}; {print $10, $2, $3, $4, $5"HT"}} else {print $1, $2, $3, $4, $5}}' file
..生成一个看起来像这样的结果:
2 71319482 71319483 71319483 MantaBNDHT
8 17715051 17715052 17715052 MantaDEL
5 137014789 137014790 137014790 MantaBNDHT
8 34426251 34426252 34426252 MantaDEL
C]14 36674759 36674760 36674760 MantaBND
但结果却是这样:
1 71319482 71319483 71319483 MantaBNDHT
0 17715051 17715052 17715052 MantaDEL
1 137014789 137014790 137014790 MantaBNDHT
0 34426251 34426252 34426252 MantaDEL
0 36674759 36674760 36674760 MantaBND
为什么会发生这种情况?如何解决问题?我希望有一个人可以帮助我。
答案 0 :(得分:0)
使用sub而不是split也是可能的,但是只使用sub会导致第5列出错,所以我终于找到了一种方法(感谢oliv,=和==导致错误的结果,所以我测试了〜 。
awk 'BEGIN {FS="\t";OFS="\t"} {if ($1 ~ /^].*/) {{split ($1,a,/]/);$10=a[2]}; {print $10, $2, $3, $4, $5"HT"}} else {print $1, $2, $3, $4, $5}}' file
2 71319482 71319483 71319483 MantaBNDHT
8 17715051 17715052 17715052 MantaDEL
5 137014789 137014790 137014790 MantaBNDHT
8 34426251 34426252 34426252 MantaDEL
C]14 36674759 36674760 36674760 MantaBND