请教一个json格式用awk处理
时间:2011-06-13
来源:互联网
一个json格式的一行字符串为:
{"abab":[[1.11,2.2228],[1.2138,8.3213],[108.23,0.1230],[8235.12,1243]],"cdcdc":[[123.1,2.2428],[1.28,8.3213],[108.23,0.123],[85.12,143],[32534.2,4783.34]]}
结构很简单:{}中有两大字段,每个字段内有很多组数据对,比如[1.11,2.2228]。
现在想要把上面的内容要如下格式列出来:
"abab" ----------------------------------
1.11 2.2228
1.2138 8.3213
108.23 0.1230
“cdcdc"-----------------------------------
123.1 2.2428
1.28 8.3213
108.23 0.123
用awk该用什么命令?多谢!
{"abab":[[1.11,2.2228],[1.2138,8.3213],[108.23,0.1230],[8235.12,1243]],"cdcdc":[[123.1,2.2428],[1.28,8.3213],[108.23,0.123],[85.12,143],[32534.2,4783.34]]}
结构很简单:{}中有两大字段,每个字段内有很多组数据对,比如[1.11,2.2228]。
现在想要把上面的内容要如下格式列出来:
"abab" ----------------------------------
1.11 2.2228
1.2138 8.3213
108.23 0.1230
“cdcdc"-----------------------------------
123.1 2.2428
1.28 8.3213
108.23 0.123
用awk该用什么命令?多谢!
作者: xiongzm 发布时间: 2011-06-13
本帖最后由 ywlscpl 于 2011-06-13 17:47 编辑
回复 xiongzm
{}中可以有多段数据
复制代码
复制代码
回复 xiongzm
{}中可以有多段数据
- awk -F '(]],)|:' '{delete m;for (i=1;i<=NF;i++) if (i%2){gsub(/[}{]/,"",$i);print $i"-------------"}else {gsub(/[][}{]/,"",$i);for (j=1;j<=split($i,m,",");j+=2) print m[j],m[j+1]}}' file
- [root@Mylinux tmp]# cat file
- {"test":[[1,3],[5,6]],"abab":[[1.11,2.2228],[1.2138,8.3213],[108.23,0.1230],[8235.12,1243]],"cdcdc":[[123.1,2.2428],[1.28,8.3213],[108.23,0.123],[85.12,143],[32534.2,4783.34]]}
- [root@Mylinux tmp]# awk -F '(]],)|:' '{delete m;for (i=1;i<=NF;i++) if (i%2){gs
- ub(/[}{]/,"",$i);print $i"-------------"}else {gsub(/[][}{]/,"",$i);for (j=1;j<
- =split($i,m,",");j+=2) print m[j],m[j+1]}}' file
- "test"-------------
- 1 3
- 5 6
- "abab"-------------
- 1.11 2.2228
- 1.2138 8.3213
- 108.23 0.1230
- 8235.12 1243
- "cdcdc"-------------
- 123.1 2.2428
- 1.28 8.3213
- 108.23 0.123
- 85.12 143
- 32534.2 4783.34
作者: ywlscpl 发布时间: 2011-06-13
谢谢!明白您的思路了,有些细节不了解。
有一个问题,我想对其数据好看一点,改为如下:
awk -F '(]],)|:' '{delete m;for (i=1;i<=NF;i++) if (i%2){gsub(/[}{]/,"",$i);print $i"-------------"}else {gsub(/[][}{]/,"",$i);for (j=1;j<=split($i,m,",");j+=2) print m[j],"\t\t",m[j+1]}}' file
但是出来不好看,因为第1列数据位数不完全一样,这儿怎么弄一下?再次感谢!
有一个问题,我想对其数据好看一点,改为如下:
awk -F '(]],)|:' '{delete m;for (i=1;i<=NF;i++) if (i%2){gsub(/[}{]/,"",$i);print $i"-------------"}else {gsub(/[][}{]/,"",$i);for (j=1;j<=split($i,m,",");j+=2) print m[j],"\t\t",m[j+1]}}' file
但是出来不好看,因为第1列数据位数不完全一样,这儿怎么弄一下?再次感谢!
作者: xiongzm 发布时间: 2011-06-13
本帖最后由 ywlscpl 于 2011-06-13 18:04 编辑
回复 xiongzm
print m[j]"\t\t"m[j+1]
BTW:楼主名字缩写很像我一个朋友
回复 xiongzm
print m[j]"\t\t"m[j+1]
BTW:楼主名字缩写很像我一个朋友
作者: ywlscpl 发布时间: 2011-06-13
OK, done!
作者: xiongzm 发布时间: 2011-06-13
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28