请教一个json格式用awk处理
一个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