Как мне преобразовать ASCII-символ в ASCII HEX в сценарии AWK?

Я хочу цикл по диапазону букв

пример

for(i="a"; i<"g"; i++)
 print i;

ПРИМЕЧАНИЕ: я хочу цикл в диапазоне от шестнадцатеричного представления и печати символа.

3 ответа3

1

Похоже, мне не нужны все персонажи ...

$ awk 'BEGIN { chartable="abcdefghij" ; for (i=index(chartable, "a"); i<index(chartable, "g"); i++) { print substr(chartable, i, 1) } }'
a
b
c
d
e
f
0

Создайте таблицу, содержащую все символы ASCII, и используйте встроенный индекс awk index() для поиска символов в таблице. Затем используйте sprintf() чтобы преобразовать десятичное значение, возвращаемое index() в шестнадцатеричное.

BEGIN {
    for (i = 0; i < 128; i++) {
       table = sprintf("%s%c", table, i);
    }
}

function chartohex (char) {
    return sprintf("0x%x", index(table, char));
}

END { # examples
   print chartohex("a");
   print chartohex("A");
   print chartohex("!");
}

Поместите этот код в файл "foo" и запустите awk -f foo < /dev/null и вы увидите значения ASCII для "a", "A" и "!"напечатано в шестнадцатеричном формате.

0

У awk нет функций ord(), chr(), таких как python. Вы должны сначала создать массив в блоке BEGIN, индекс которого является символом ascii, а значение - десятичным числом.

awk 'BEGIN {
 for (i = 0; i <= 255; i++) {
    t = sprintf("%c", i)
    a[t] = i
}

for( i=a["a"]; i < a["g"]; i++)
    print sprintf("%c",i)
}'
a
b
c
d
e
f

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .