2015-11-21 2 views
0

Какого черта здесь не так:не может соответствовать строке с 2-значное число в конце

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. (Да, ужасный код, но я новичок) Tried/imm [0-9] [0-9]/и/imm [0-9] */и /imm[0-9]./, но нет разница. Я напечатал $ i, чтобы увидеть, что «imm11» есть.

Я не мог заставить его работать даже с 'else if ($ i == "imm11")'.

+0

Если вы размещаете некоторый ввод проб и ожидаемый результат, мы можем вам помочь. Помните - сценарий, который производит вывод, который вы ожидаете от некоторого вводимого вами ввода, является лишь отправной точкой для определения решения, это не обязательно правильное/лучшее решение. –

+0

Ну, вход - это Справочное руководство по архитектуре ARM, редакция ARMv7-A и ARMv7-R, преобразованная в текстовую форму. Я не буду вставлять его здесь. Также мой скрипт длиной 136 строк. Идея состоит в том, чтобы подготовить таблицу инструкций большого пальца с их битовыми шаблонами. Сценарий уменьшает ручное редактирование. Тогда есть и другой скрипт, но он работает хорошо. – turboscrew

+0

Ах, хорошо, я вернусь к вам, как только я найду и изучу документа ARM (что бы это ни было). В то же время, я уверен, что если вы приложите к себе немного усилий, вы можете с небольшим простым примером, который просто демонстрирует эту конкретную проблему, о которой вы просите о помощи. Последний может помочь вам быстрее ... –

ответ

1

На первом взгляде, код, кажется, работает (от Баша) ...

$ 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 

Я думаю, что есть что-то еще в начале кода, чтобы заблокировать этот кусок от выполнения .... возможно вам нужны скобки вокруг блока перед другим?

+0

Это тоже работает для меня - в командной строке. И странно, что код работает с «imm1», но не с «imm11» или «imm10». – turboscrew

+0

Michael Back: Вы были правы. Это получает, но я не понимаю, почему он соответствует: $ echo imm11 | awk 'BEGIN {i = 0} {if ($ i ~/\ (? 1 \)? /) {BITPATT = BITPATT "1"; распечатать $ 1; }} ' imm11 – turboscrew

+0

А, теперь я понимаю. Не следует писать код в формате 4AM. ;-) – turboscrew

 Смежные вопросы

  • Нет связанных вопросов^_^