通过AWK脚本解析海量文本攫取十六进制字符串转为点分十进制信息
2011-02-19 21:22
821 查看
首先要说明的一点是,在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
# !/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
相关文章推荐
- 第8章_字符串与文本I/O_编程练习_8.9_十进制转化为十六进制
- MFC 十六进制字符串"0x*****”转为十进制数
- python将十六进制字符串转为十进制数字
- AWK --脚本语言、工具详解 (GCC内嵌,如同SQL 字段驱动解析文本)
- Objective-C十六进制字符串转为十进制
- 通过实例学习Virtools脚本语言VSL - 解析字符串
- 通过实例学习Virtools脚本语言VSL - 解析字符串
- 解析字符串,每八位的二进制转为十进制
- AWK --脚本语言、工具详解 (GCC内嵌,如同SQL 字段驱动解析文本)
- python将十六进制字符串转为十进制数字
- python将十六进制字符串转为十进制数字
- Shell脚本------解析elf文件及awk基本使用
- 前端通过ajax解析字符串
- 如何通过消息传递字符串信息
- 如何使用 awk 按模式筛选文本或字符串
- VC中 十六进制字符串转换为十进制数字
- 如何使用 awk 按模式筛选文本或字符串
- 如何在android环境下进行ttf解析,通过获取文件头信息得到字体名称!
- C语言中字符串如何转换为二进制、八进制、十进制、十六进制
- 【Java】数组不能通过toString方法转为字符串