awk - 如何使用 gawk 5 以确定的方式将字符串转换为 int 等价物?
问题描述
我正面临一种情况,我需要将字符串转换为与gawk5
.
这种转换必须是确定性的。
我的第一个天真的方法是将字符串的每个字母转换为其在拉丁字母表中的等效位置,然后将结果连接回字符串。
例如:
my_string = "AB"
A = 1
B = 2
my_int=12
但是,这有几个缺点:
- 非常长的字符串可能会生成一个超出最大整数大小的整数。
- 遇到特殊字符、符号等怎么办?
- 这需要我保存字母表中每个字符位置的表格。
所以,基本上,这是不行的。
从字符串生成整数的好方法是gawk5
什么?
PS:有些人会评论说 gawk 可能不是这样做的工具,他们可能是对的,我知道这一点。但这是一个个人项目,如果可能的话,应该只包括 awk ;)
解决方案
如果您的字符串仅包含 ASCII 字符,没有换行符,并且如果您使用 GNU awk,则以下内容只是将每个字符转换为其 3 位 ASCII 代码:
$ echo "abc" | awk -vFS= '
BEGIN {for(i=0;i<128;i++) c[sprintf("%c",i)]=i}
{for(i=1;i<=NF;i++) printf("%03d",c[$i])}'
097098099
当然,这会将字符串扩展为 3 倍,这可能是次优的。如果您知道您的字符串仅包含 32-127 范围内的 ASCII 字符,则可以将此因子减少到 2:
$ echo "abc" | awk -vFS= '
BEGIN {for(i=32;i<128;i++) c[sprintf("%c",i)]=i-32}
{for(i=1;i<=NF;i++) printf("%02d",c[$i])}'
656667
推荐阅读
- css - Reactjs 和 SCSS - 如何写高度:selfheight x 2
- wso2 - 使用 wso2 esb multipart /form 数据
- javascript - 使用withStyles导出子组件时如何访问父级中的引用?
- python - Numpy:通过另一个数组的唯一性,任意长度在一个数组中查找对应关系
- php - PHP使用linux从服务器复制文件
- mysql - 将数据库时间戳值与今天的日期进行比较,并在 codeigniter 中获取结果
- spring-boot - SpringBatch - 即使第一步失败也执行下一步
- opengl - textureLod() 返回 0,其中 texelFetch() 返回 1
- php - 我在数组中有多个同名的单选按钮,并且具有与 1 相同的值
- javascript - 如何防止谷歌地图被拖出上下边界?