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