当前位置: 首页 > 知识库问答 >
问题:

linux - awk中使用sprintf("%d", "a")获取字符的ASCII值,为什么返回的是0?

翟泰
2023-08-08

之前写的一段数据处理的代码发现结果有问题,最后排查是这段获取字符的ASCII值的方法出问题了。
试了下
echo "" | awk '{print sprintf("%d", "a"), sprintf("%c", 97)}'
结果是 0 a
为什么用"%c"把ASCII码值转字符没问题,用"%d"反过来就不行了?

共有2个答案

单于海荣
2023-08-08
echo "a" | awk '{print ord($0)}'function ord(str) {    return sprintf("%d", index("abcdefghijklmnopqrstuvwxyz", str))}

或者

printf "%d\n" "'a"
龚远
2023-08-08

因为你用了一般语言的代码逻辑去解释 awk 脚本。

在 awk 脚本中,"%d" 的含义是将字符串转化为对应的整数。
echo "" | awk '{print sprintf("%d", "5666")}' 输出 5666
echo "" | awk '{print sprintf("%d", "5666.1")}' 输出 5666
echo "" | awk '{print sprintf("%d", "05666.1")}' 输出 5666
echo "" | awk '{print sprintf("%d xx", "056x66")}' 输出 56
echo "" | awk '{print sprintf("%d xx", "x056x66")}' 输出 0

解决方法1

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

解决方法2

我自己想出来的办法,也结合了上面 stackoverflow 的其它答案:
echo "" | awk '{system("printf \"%d\" \"\047a\"")}'

  • system 表示执行系统命令
  • 需要执行的是 printf "%d" "'a"
  • 这个单引号是必须要的,但是 awk 中不能直接使用,因此使用 \047 代替。
 类似资料:
  • 问题内容: 我感兴趣的部分是: 谢谢你的帮助! 问题答案: 这意味着结果值将被强制转换为 和 (即可序列化的比较器) 请注意,在进行此类转换时,您 只能 指定一个类(和无限数量的接口),因为一个类不可能从一个以上的超类继承。

  • 问题内容: 我正在使用urllib2从网页中获取数据。所有页面的内容均为英语,因此不存在处理非英语文本的问题。但是页面是经过编码的,有时它们包含HTML实体,例如£或版权符号等。 我想检查页面的某些部分是否包含某些关键字-但是,我想进行不区分大小写的检查(出于明显的原因)。 将返回的页面内容转换为所有小写字母的最佳方法是什么? [[更新]] 我不必使用urllib2来获取数据,实际上我可以改用Be

  • 问题内容: 如何获取字符的ASCII值 问题答案: 函数将获得的值。而且,如果你想在玩完数字后再转换回去,可以使用函数来解决。 在Python 2中,还有一个unichr函数,返回其序数为参数的字符: 在Python 3中,你可以使用代替。

  • 问题内容: 我正在编写一个拒绝访问未授权用户的安全系统。 它可以按预期授予授权用户访问权限,但也允许未经授权的用户使用! 为什么会发生这种情况?我已经明确指出仅在name等于,或 时才授予访问权限。我也尝试过相反的逻辑if ,但是结果是一样的。 问题答案: 在许多情况下,Python的外观和行为都像自然的英语,但这是这种抽象失败的一种情况。人们可以使用上下文线索来确定和是与动词连接的对象,但是Py

  • 这可能是最简单的事情之一,但我没有看到我做错了什么。 我的输入包括第一行带有数字(要读取的行数),一堆带有数据的行和最后一行只带有\n。我应该处理这个输入,在最后一行之后,做一些工作。 我有这样的意见: 为了读取输入,我有以下代码。 我的问题是为什么我不打印任何东西?程序读取第一行,然后什么也不做。

  • 本文向大家介绍什么是方法的返回值?返回值在类的方法里的作用是什么?相关面试题,主要包含被问及什么是方法的返回值?返回值在类的方法里的作用是什么?时的应答技巧和注意事项,需要的朋友参考一下 方法的返回值是指我们获取到的某个方法体中的代码执行后产生的结果!(前提是该方法可能产生结果)。 返回值的作用: 接收出结果,使得它可以用于其他的操作!