无法匹配末尾带有2位数字的字符串

时间:2015-11-21 04:39:20

标签: awk gawk

这里有什么问题:

else if ($i ~ /imm[0-9]+/) {
    CNT = match($i, /[0-9]+/)
    K = substr($i, CNT)
    n = int(K)
    print $i, "n = ", n, "CNT=", CNT, "K=", K
    for ( j = 1; j <= n; j++ ) { BITPATT = BITPATT " i" }
}

它找到较小的数字(如imm1,imm3,imm5,imm8),但如果数字有2位数,则不会,如imm11。 (是的,糟糕的代码,但我是初学者)尝试/ imm [0-9] [0-9] /和/ imm [0-9] * /和/imm[0-9]./,但没有区别。我打印$ i看到'imm11'就在那里。

即使使用'else if($ i ==“imm11”)'也无法让它工作。

1 个答案:

答案 0 :(得分:1)

乍一看,代码似乎有效(来自bash)......

$ echo imm11 | awk 'BEGIN { i=0 } { if ($i ~ /imm[0-9]+/) { CNT = match($i, /[0-9]+/); K = substr($i, CNT); n = int(K); print $i, "n = ", n, "CNT=", CNT, "K=", K } }'
imm11 n =  11 CNT= 4 K= 11

我认为你的代码中还有其他东西可以阻止这个部分执行....也许你需要在else之前使用关于块的括号?