gpt4 book ai didi

parsing - awk 版本问题 - 将十六进制转换为十进制

转载 作者:行者123 更新时间:2023-11-29 09:49:16 24 4
gpt4 key购买 nike

我通常在我的 Mac 上编写脚本,一旦准备就绪,我就会将它们通过 sftp 传输到我工作时的测试箱中。我在这里面临的问题是我有一个数据流,它是一个十六进制格式的 IP 地址。我混合使用 sed 和 awk 来解析它并将其转换为更易读的格式。

$echo $content12
cb5c860100000000000000000000000000

[DoD@MBP-13~] echo $content12 |
sed -e 's/../&./g' -e 's/.$//' | sed 's/[0-9a-z][0-9a-z]/0x&/g' |
awk -F"." '{for (i=1;i<NF;i++) printf ("%d\n", $i)}' |
awk '{if (NR<5) printf $0; printf "."}' | sed 's/\.\.*$//'
203.92.134.1

当我将其移植到工作中的测试箱时,脚本没有按预期运行。

$echo $content12 | 
sed -e 's/../&./g' -e 's/.$//' | sed 's/[0-9a-z][0-9a-z]/0x&/g' |
awk -F"." '{for (i=1;i<NF;i++) printf ("%d\n", $i)}' |
awk '{if (NR<5) printf $0; printf "."}' | sed 's/\.\.*$//'
0.0.0.0

我 mac 上的 awk 和 uname 版本 -

[DoD@MBP-13~] awk --version
awk version 20070501

[DoD@MBP-13~] uname -a
Darwin MBP-13.local 11.2.0 Darwin Kernel Version 11.2.0: Tue Aug 9 20:54:00 PDT 2011;
root:xnu-1699.24.8~1/RELEASE_X86_64 x86_64

我工作时测试盒上的 awk 和 uname 版本 -

$ awk --version
GNU Awk 3.1.5
Copyright (C) 1989, 1991-2005 Free Software Foundation

$uname -a
Linux 2.6.18-194.el5 #1 SMP Tue Mar 16 21:52:39 EDT 2010
x86_64 x86_64 x86_64 GNU/Linux

我可以通过微小的更改来解决这个问题吗?我对 UNIX 环境还是很陌生,所以我的一行代码对您来说可能看起来异常长。任何建议将不胜感激。

最佳答案

您可以使用 gawk--non-decimal-data 选项使其处理输入中的八进制和十六进制数字:

$ echo 0x10 | gawk --non-decimal-data '{ printf "%d", $1 }'
16

对比:

$ echo 0x10 | gawk '{ printf "%d", $1 }'
0

关于parsing - awk 版本问题 - 将十六进制转换为十进制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8074404/

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