Как мне преобразовать ASCII-символ в ASCII HEX в сценарии AWK?
Я хочу цикл по диапазону букв
пример
for(i="a"; i<"g"; i++)
print i;
ПРИМЕЧАНИЕ: я хочу цикл в диапазоне от шестнадцатеричного представления и печати символа.
Как мне преобразовать ASCII-символ в ASCII HEX в сценарии AWK?
Я хочу цикл по диапазону букв
пример
for(i="a"; i<"g"; i++)
print i;
ПРИМЕЧАНИЕ: я хочу цикл в диапазоне от шестнадцатеричного представления и печати символа.
Похоже, мне не нужны все персонажи ...
$ 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
Создайте таблицу, содержащую все символы 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" и "!"напечатано в шестнадцатеричном формате.
У 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