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

发布于 2024-08-26 09:05:28 字数 136 浏览 3 评论 0原文

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

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

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

I need to print the ASCII value of the given character in awk only.

Below code gives 0 as output:

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

嘦怹 2024-09-02 09:05:29

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

基本前提是使用查找表。

Using only basic awk (not even gawk, so the below should work on all BSD and Linux variants):

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

Here's the opposite direction (for completeness):

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

Basic premise is to use a lookup table.

乖乖公主 2024-09-02 09:05:29

有关可以使用的序数函数,请参阅 awk 手册。但由于您使用的是 awk,因此您应该使用某种版本的 shell,例如 bash。那么为什么不使用 shell 呢?

$ printf "%d" "'a"
97

see the awk manual for ordinal functions you can use. But since you are using awk, you should be on some version of shell, eg bash. so why not use the shell?

$ printf "%d" "'a"
97
回首观望 2024-09-02 09:05:29

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

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

It seems this is not a trivial problem. I found this approach using a lookup array, which should work for A-Z at least:

 BEGIN { convert="ABCDEFGHIJKLMNOPQRSTUVWXYZ" } 
       { num=index(convert,substr($0,2,1))+64; print num }
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文