如何仅使用基本awk打印字符的ASCII值

我只需要在awk中打​​印给定字符的ASCII值。

下面的代码给出0作为输出:

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

请参阅您可以使用的序数函数的awk手册。 但是既然你使用的是awk,你应该使用某个版本的shell,比如bash。 那么为什么不使用shell呢?

 $ printf "%d" "'a" 97 

使用只有基本的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 

基本的前提是使用查找表。

看来这不是一个小问题。 我发现这种方法使用查找数组,至少应该为AZ工作:

  BEGIN { convert="ABCDEFGHIJKLMNOPQRSTUVWXYZ" } { num=index(convert,substr($0,2,1))+64; print num }