Как напечатать значение ASCII символа, используя только базовый awk - PullRequest
14 голосов
/ 23 марта 2010

Мне нужно напечатать значение ASCII данного символа только в awk.

Ниже код дает 0 в качестве вывода:

echo a | awk '{ printf("%d \n",$1); }'

Ответы [ 3 ]

27 голосов
/ 08 января 2013

Использование только базового 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

Основная предпосылка - использовать справочную таблицу.

10 голосов
/ 23 марта 2010

см. Руководство по awk для порядковых функций , которые вы можете использовать.Но так как вы используете awk, вы должны использовать какую-то версию оболочки, например bash.так почему бы не использовать оболочку?

$ printf "%d" "'a"
97
5 голосов
/ 23 марта 2010

Кажется, это не тривиальная проблема.Я нашел этот подход, используя массив поиска, который должен работать как минимум для AZ:

 BEGIN { convert="ABCDEFGHIJKLMNOPQRSTUVWXYZ" } 
       { num=index(convert,substr($0,2,1))+64; print num }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...