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

时间:2010-03-23 10:59:47

标签: unix shell awk

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

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

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

3 个答案:

答案 0 :(得分:27)

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

基本前提是使用查找表。

答案 1 :(得分:10)

请参阅您可以使用的ordinal functions的awk手册。但是因为你使用awk,你应该使用某种版本的shell,例如bash。那么为什么不使用shell?

$ printf "%d" "'a"
97

答案 2 :(得分:3)

这似乎不是一个小问题。我发现这种方法使用查找数组,至少应该适用于A-Z:

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