awk如果表达式创建0和1而不是预期结果

时间:2018-03-08 15:35:07

标签: linux if-statement awk split

输入文件是制表符分隔的,如下所示:

]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

为什么会发生这种情况?如何解决问题?我希望有一个人可以帮助我。

1 个答案:

答案 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