Chinaunix
标题:
shell如何处理16进制值累计
[打印本页]
作者:
苏州大鱼
时间:
2014-01-27 15:34
标题:
shell如何处理16进制值累计
有类似这样一个xml
<?xml version="1.0"?>
<test>
<Number>1000</Number>
<Start>00E011223300</Start>
<Tag ID="aaa"><CRC>916ea803</CRC></Tag>
<Tag ID="ert"><CRC>213727c7</CRC></Tag>
<Tag ID="asd"><CRC>213727c7</CRC></Tag>
</test>
提取里面的ID 生成下面这样的格式:
aaa 00E011223300
ert 00E011223301
asd 00E011223302
......
每个提取ID我会了,现在就是如何处理那个16进制的Start值累加,同时附在后面?
作者:
苏州大鱼
时间:
2014-01-27 15:53
嗯,我想了下和xml无关了
给一个16进制值,如:00E011223300
在文本每一行后面附加它的累计
asdasdasd
adadadasd
12121sada
asdasdad1
121212121
出来这样的:
asdasdasd 00E011223300
adadadasd 00E011223301
12121sada 00E011223302
asdasdad1 00E011223303
121212121 00E011223304
不知道怎么弄,感觉用awk或sed可以的
作者:
苏州大鱼
时间:
2014-01-27 16:09
test$ awk -v s=00E0 '{print $0 FS s++}' test1.txt
asdasdasd 0
adadadasd 1
12121sada 2
asdasdad1 3
121212121 4
asdasdasd 5
adadadasd 6
12121sada 7
asdasdad1 8
121212121 9
asdasdasd 10
adadadasd 11
12121sada 12
asdasdad1 13
121212121 14
复制代码
作者:
苏州大鱼
时间:
2014-01-27 16:10
我出来是这种结果,我想要的是16进制的表示和累计
00E0
00E1
00E2
作者:
nathanielwen
时间:
2014-01-27 16:30
[root@localhost test]# awk -v s=0 '{printf("%s 00E%x\n",$0,s++)}' test1.txt
asdasdasd 00E0
adadadasd 00E1
12121sada 00E2
asdasdad1 00E3
121212121 00E4
asdasdasd 00E5
adadadasd 00E6
12121sada 00E7
asdasdad1 00E8
121212121 00E9
asdasdasd 00Ea
adadadasd 00Eb
12121sada 00Ec
asdasdad1 00Ed
121212121 00Ee
复制代码
作者:
jiejie455
时间:
2014-01-27 16:35
awk 'BEGIN{FS="[><]"};/Start/{start=$3};/<\/CRC>/{ "echo \"obase=ibase=16;"start"+1\"|bc"|getline a;print $2,a;start=a}' data
作者:
jiejie455
时间:
2014-01-27 16:42
awk 'BEGIN{start="00E011223300"}{"echo \"obase=ibase=16;"start"+1\"|bc"|getline a;print $1"\t"a;start=a}' data
作者:
jason680
时间:
2014-01-27 16:59
回复
1#
苏州大鱼
h2a for Hex to ASCII (ex: number 12 --> char "C")
a2h for ASCII to hex (ex: char "D" --> number 13)
$ awk -vs=
00E011223300
'BEGIN{split("123456789ABCDEF",h2a,"");;h2a[0]="0";for(n=0;n<=15;n++)a2h[h2a[n]]=n}function hex_add(x,A){R="";for(n=length(x);n>0;n--){N=a2h[substr(x,n,1)]+A;A=N>15?1:0;R=h2a[N%16]""R}return R}{print $1,s;s=hex_add(s,
1
)}' FILE
asdasdasd
00E011223300
adadadasd 00E011223301
12121sada 00E011223302
asdasdad1 00E011223303
121212121 00E011223304
作者:
ly5066113
时间:
2014-01-28 14:55
回复
1#
苏州大鱼
这个意思?
awk -F '[>"<]' '/Start/{n=strtonum("0x"$3)}/Tag/{printf "%s\t%012X\n",$3,++n}' xmlfile
复制代码
作者:
苏州大鱼
时间:
2014-01-28 15:26
回复
9#
ly5066113
谢谢阿,我再学习下
欢迎光临 Chinaunix (http://bbs.chinaunix.net/)
Powered by Discuz! X3.2