Linux-shell格式化数据的问题?

Linux-shell格式化数据的问题?

泛泛之交 发布于 2016-11-29 字数 1130 浏览 1168 回复 4

有一个文件,内容如下:

0000000000000101
0000000000000201
0000000000000301
0000000000000401
0000380000000101
0000650000000201
0000650000000301
0000650000000401
0001000000000101
0001000000000201
0001000000000301
0001000000000401
0038d30000000101
00652e0000000201
00652e0000000301
00652e0000000401
008d750000000101
008d750000000201
008d750000000301
008d750000000401
0100010000000101
0100010000000201
0100010000000301
0100010000000401
01008d0000000101
01008d0000000201
01008d0000000301
01008d0000000401
01a8c00000000101
01a8c00000000201
01a8c00000000301
01a8c00000000401
0264010000000101
0264010000000201
0264010000000301
0264010000000401
0615df0000000101
0615df0000000201
0615df0000000301
0615df0000000401
07dd940000000101
07dd940000000201
07dd940000000301
07dd940000000401
0900000000000101
0900000000000201
0900000000000301
0900000000000401
15dfc70000000101
15dfc70000000201
15dfc70000000301
15dfc70000000401
1ecf090000000101

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

泛泛之交 2017-07-15 4 楼

shell的没写出来,用python写了一个

 dct=dict()
f = file('p.txt')
while True:
line = f.readline()
if len(line) == 0:
break
#print line
key=line[0:6]
if dct.has_key(key):
dct[key].append(line[6:16])
else:
dct[key]=[line[6:16]]

f.close()

f=file('pout.txt','w')
print dct
for i in dct:
f.write(i+' ')
for j in dct[i]:
f.write(j+' ')
f.write('n')
f.close();

这是结果

 0038d3 0000000101
1ecf09 0000000101
026401 0000000101 0000000201 0000000301 0000000401
07dd94 0000000101 0000000201 0000000301 0000000401
000000 0000000101 0000000201 0000000301 0000000401
00652e 0000000201 0000000301 0000000401
000038 0000000101
008d75 0000000101 0000000201 0000000301 0000000401
01008d 0000000101 0000000201 0000000301 0000000401
000100 0000000101 0000000201 0000000301 0000000401
0615df 0000000101 0000000201 0000000301 0000000401
000065 0000000201 0000000301 0000000401
010001 0000000101 0000000201 0000000301 0000000401
15dfc7 0000000101 0000000201 0000000301 0000000401
01a8c0 0000000101 0000000201 0000000301 0000000401
090000 0000000101 0000000201 0000000301 0000000401

甜柠檬 2017-05-06 3 楼

找到一个简洁的方法,分享一下:

 sed ':a;$!N;s/^(.*)(( *.{10})*)n1/12 /;ta;/ /!D;s/.{10} / &/;P;D' file.txt

归属感 2017-02-04 2 楼

 awk '{k=substr($0,0,6);a[k]=a[k] " " substr($0,6);}END{for(i in a)print i "" a[i]} ' file.txt

归属感 2016-12-23 1 楼

 gawk -v FIELDWIDTHS='6 10' 'NR!=1 && x==$1""{printf(" %s", $2); next}; {x=$1""; printf("%s%s %s", NR==1?"":"n", $1, $2)}; END{print ""}' file.txt | sed '/^[0-9a-f]* [0-9a-f]*$/d'

输出结果如下:

 000000 0000000101 0000000201 0000000301 0000000401
000065 0000000201 0000000301 0000000401
000100 0000000101 0000000201 0000000301 0000000401
00652e 0000000201 0000000301 0000000401
008d75 0000000101 0000000201 0000000301 0000000401
010001 0000000101 0000000201 0000000301 0000000401
01008d 0000000101 0000000201 0000000301 0000000401
01a8c0 0000000101 0000000201 0000000301 0000000401
026401 0000000101 0000000201 0000000301 0000000401
0615df 0000000101 0000000201 0000000301 0000000401
07dd94 0000000101 0000000201 0000000301 0000000401
090000 0000000101 0000000201 0000000301 0000000401
15dfc7 0000000101 0000000201 0000000301 0000000401