gpt4 book ai didi

linux - 如何在系统命令中使用 awk 脚本的 shell 变量?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:45:13 24 4
gpt4 key购买 nike

我在使用 awk 将 txt 文件的十六进制转换为十进制时遇到了麻烦。

我想这样做

awk -F' '   '{   system("echo '$((16#"$1"))'") '} $file_name

但是不行...然后我尝试其他代码

awk -F' ' -v var="\"echo \x27\$((16#" '{var=var$1"))\x27\"" system(var) }' $file_name

也不行。但是然后打印 var enter image description here

我该怎么办?

最佳答案

使用 awk

使用 GNU awk 将十六进制转换为十进制:

$ echo '0xFFFFFFFE' | awk -n '{printf "%i\n",$1}'
4294967294

或者:

$ x='0xFFFFFFFE'
$ awk -n -v x="$x" 'BEGIN{printf "%i\n",x}'
4294967294

或者:

$ x='0xFFFFFFFE'; awk -v x="$x"  'BEGIN{print strtonum(x)}'
4294967294

使用 bash 将十六进制转换为十进制:

$ echo $((0xFFFFFFFE))
4294967294

限制:

1. GNU awk is limited to 52-bit integers.

2. The above could be extended to perform two's-complement arithmetic but it hasn't.

要避免这两个限制,请参阅下面的 python 解决方案:

使用 python

Awk 不处理长整数。对于长整数,考虑这个 python 脚本:

$ cat n.py
#!/usr/bin/python3
import sys
def h(x):
x = int(x, 16)
return x if x < 2**63 else x - 2**64

for line in sys.stdin:
print(*[h(x) for x in line.split()])

让我们使用这个输入文件:

$ cat file
FFFFFFFFFFFFFFFF EFEFEFEFEFEFEFEF

当我们运行我们的脚本时,我们发现:

$ python3 n.py <file
-1 -1157442765409226769

关于linux - 如何在系统命令中使用 awk 脚本的 shell 变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48199869/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com