Как напечатать значение ASCII символа, используя только базовый awk
Мне нужно напечатать значение ASCII данного символа только в awk.
Ниже код дает 0 как вывод:
echo a | awk '{ printf("%d \n",$1); }'
Ответ 1
см. руководство awk для порядковые функции, которые вы можете использовать. Но поскольку вы используете awk, вы должны быть в некоторой версии оболочки, например bash. так почему бы не использовать оболочку?
$ printf "%d" "'a"
97
Ответ 2
Использование только базового awk (даже не gawk, поэтому нижеследующее должно работать со всеми вариантами BSD и Linux):
$ echo a | awk 'BEGIN{for(n=0;n<256;n++)ord[sprintf("%c",n)]=n}{print ord[$1]}'
97
Здесь противоположное направление (для полноты):
$ echo 97 | awk 'BEGIN{for(n=0;n<256;n++)chr[n]=sprintf("%c",n)}{print chr[$1]}'
a
Основная предпосылка заключается в использовании таблицы поиска.
Ответ 3
Кажется, это не тривиальная проблема. Я нашел этот подход, используя массив поиска, который должен работать как минимум для A-Z:
BEGIN { convert="ABCDEFGHIJKLMNOPQRSTUVWXYZ" }
{ num=index(convert,substr($0,2,1))+64; print num }