嗨我有一个IP地址存储为
的文件ssIpAddress: AC1AF0F1
.
.
.
ssIpAddress: AC1AF011
等等,
我使用awk查找并打印如下,
awk '
/ssIpAddress/ {
str = sprintf("0x%s", $2)
ssIp = strtonum(str)
printf ("%d.%d.%d.%d\t",
rshift(and(ssIp,0xff000000),24),
rshift(and(ssIp,0x00ff0000),16),
rshift(and(ssIp,0x0000ff00),08),
rshift(and(ssIp,0x000000ff),00))
}' <file>
当我尝试这个时,我得到非法的语法错误。任何人都可以用语法识别错误吗?
答案 0 :(得分:1)
我强烈怀疑,当你说i get illegal syntax error.
时,你确实得到了这个:
awk: syntax error near line 6
awk: illegal statement near line 6
这意味着您正在使用旧的,破坏的awk(Solaris上的/ bin / awk)。永远不要使用那个awk。如果你有,请使用gawk,否则如果在Solaris上使用/ usr / xpg4 / bin / awk。 nawk也可以,但不太接近POSIX(例如它不支持像[[:space:]]
这样的字符类。)
strtonum()
是一种gawk扩展,我相信它是按位运算符函数,因此您需要使用gawk或更改代码。
下次有问题时,请确保完全按原样复制/粘贴任何输出和/或错误消息,以便删除猜测工作,以便我们更方便地为您提供帮助。
答案 1 :(得分:0)
您可以使用 ctf-party(免责声明:我是作者)
require 'ctf_party'
'AC1AF0F1'.from_hexip # => "172.26.240.241"
'AC1AF011'.from_hexip # => "172.26.240.17"
'AC1AF0F1'.from_hexip(nibble: :low) # => "241.240.26.172"
'AC1AF011'.from_hexip(nibble: :low) # => "17.240.26.172"
在 Unix 上,诸如 /proc/net/tcp
之类的某些文件首先使用低位半字节(小端),否则通常先使用高位半字节(默认)。