Unix 如何仅使用基本awk打印字符的ASCII值
我只需要在awk中打印给定字符的ASCII值 下面的代码将Unix 如何仅使用基本awk打印字符的ASCII值,unix,shell,awk,Unix,Shell,Awk,我只需要在awk中打印给定字符的ASCII值 下面的代码将0作为输出: echo a | awk '{ printf("%d \n",$1); }' 这似乎不是一个微不足道的问题。我使用查找数组找到了这种方法,该数组至少适用于a-Z: BEGIN { convert="ABCDEFGHIJKLMNOPQRSTUVWXYZ" } { num=index(convert,substr($0,2,1))+64; print num } 请参阅awk手册,了解您可以使用的信息。但是
0
作为输出:
echo a | awk '{ printf("%d \n",$1); }'
这似乎不是一个微不足道的问题。我使用查找数组找到了这种方法,该数组至少适用于a-Z:
BEGIN { convert="ABCDEFGHIJKLMNOPQRSTUVWXYZ" }
{ num=index(convert,substr($0,2,1))+64; print num }
请参阅awk手册,了解您可以使用的信息。但是由于您使用的是awk,所以应该使用某些版本的shell,例如bash。那么为什么不使用外壳呢
$ printf "%d" "'a"
97
仅使用基本awk(甚至不使用gawk,因此以下内容应适用于所有BSD和Linux变体):
$echo a | awk'BEGIN{for(n=0;要使此解决方案起作用,我需要按顺序为ASCII表中的所有字符创建查找数组。是的,这是正确的。不过它只有127个值,所以没什么大不了的。很好!注意,您可以直接说echo 97 | awk'{printf(%c',$1)}'
并获得a
。
$ 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