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

    技术2026-06-21  17

    首先要说明的一点是,在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.awk192.160.176.19

     

     

     

    最新回复(0)