Как напечатать значение 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 }