通过AWK脚本解析海量文本攫取十六进制字符串转为点分十进制信息

本文介绍了一个awk脚本,用于将十六进制数转换为十进制的IPv4地址。脚本详细展示了如何逐字符解析十六进制字符串,并通过数学运算得到对应的IP地址。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

首先要说明的一点是,在linux下面有现成的awk函数strtonum()函数可用,该函数可以把字符串转为10进制的数,但是在windows下面,mingw中的awk好像不支持strtonum函数,故而想起了一下的笨方法,希望大家批评指正!

 

# !/bin/awk
# Description: It's a awk script to convert the hex number to decimal

#       Name: str2num.awk
#       Autor: Lihan
#        Data: 2011-02-19

function char2num(char) {
 dec = "0123456789";   # decimal
 cap = "ABCDEF";       # capital
 min = "abcdef";       # minuscule
 if( length(char) > 1 ){
  print "the length of the input char is erro!";
  return;
 }
 if( index(dec,char) > 0 ) {
  return (index(dec,char) - 1);
 } 
 if( index(cap,char) > 0 ) {
  return (index(cap,char) + 9);
 }
 if( index(min,char) > 0 ) {
  return (index(min,char) + 9);
 }
 print "input char error!"

function str2num(str,out) {
 split(str,out,"");
 return;

BEGIN {
    #print "##############################################";
 #print "             BEGIN TO CONVERT"                 ;
    #print "##############################################";
}

/.*/  {                                                                              #这里的匹配模式和自己的文本对应起来
 len = length($1); # Get the length of the hex string
 str2num($1,out);
}

END   {
 printf("%d.%d.%d.%d",char2num(out[1])*16 + char2num(out[2]),
  char2num(out[3])*16 + char2num(out[4]),
  char2num(out[5])*16 + char2num(out[6]),
  char2num(out[7])*16 + char2num(out[8]));
}

 

-----------------------------------

测试结果如下:

hail@HAIL-PC ~/awk
$ echo "C0A0B0C00" | awk -f str2num.awk
192.160.176.19

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值