这里有什么问题:
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”)'也无法让它工作。
答案 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之前使用关于块的括号?