首页 > 解决方案 > 如何使用 gawk 5 以确定的方式将字符串转换为 int 等价物?

问题描述

我正面临一种情况,我需要将字符串转换为与gawk5.

这种转换必须是确定性的。

我的第一个天真的方法是将字符串的每个字母转换为其在拉丁字母表中的等效位置,然后将结果连接回字符串。

例如:

my_string = "AB"
A = 1
B = 2
my_int=12

但是,这有几个缺点:

所以,基本上,这是不行的。

从字符串生成整数的好方法是gawk5什么?

PS:有些人会评论说 gawk 可能不是这样做的工具,他们可能是对的,我知道这一点。但这是一个个人项目,如果可能的话,应该只包括 awk ;)

标签: 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

推荐阅读