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

Ven*_*oju 14 unix shell awk

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

下面的代码给出0了输出:

echo a | awk '{ printf("%d \n",$1); }'
Run Code Online (Sandbox Code Playgroud)

小智 27

仅使用基本的awk(甚至不是gawk,所以下面应该适用于所有BSD和Linux变体):

$ echo a | awk 'BEGIN{for(n=0;n<256;n++)ord[sprintf("%c",n)]=n}{print ord[$1]}'
97
Run Code Online (Sandbox Code Playgroud)

这是相反的方向(完整性):

$ echo 97 | awk 'BEGIN{for(n=0;n<256;n++)chr[n]=sprintf("%c",n)}{print chr[$1]}'
a
Run Code Online (Sandbox Code Playgroud)

基本前提是使用查找表.

  • 好一个!注意你可以直接说`echo 97 | awk '{printf("%c", $1)}'` 并得到 `a`。 (3认同)

gho*_*g74 10

请参阅awk手册,了解您可以使用的序数函数.但是因为你使用awk,你应该使用某种版本的shell,例如bash.那么为什么不使用shell呢?

$ printf "%d" "'a"
97
Run Code Online (Sandbox Code Playgroud)


Mar*_*man 5

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

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