我有这样的文件
{"100":["0.00001","10","0.01"],
"101":["0.0001","100","0.1"],
"102":["1","1000","1"],
....
"103":["0.01","10000","10"]}
我想在每个数组中将第二个数字与第三个数字交换,将其转换为
{"100":["0.00001","0.01","10"],
"101":["0.0001","0.1","100"],
"102":["1","1","1000"],
....
"103":["0.01","10","10000"]}
我该如何使用sed
,awk
或其他方式做到这一点?
注意第一个和最后一个记录的存在{
和}
。
谢谢
我建议避免使用诸如
awk
orsed
等面向文本的工具来解析 JSON 数据...而是使用 JSON 解析器或依赖于 JSON 库的语言,如
perl
,python
等。这是一个例子
jq
:所有对象都替换为第 3 个和第 2 个数组元素的排列。请注意,数组
jq
以 index 开头0
。比 jq 更冗长的是使用具有可用 JSON 库的脚本语言:
使用
jq
及其reverse
作用:或者
该表达式
.[][1:]
选择包含文档中每个数组的第一个元素以外的所有元素的切片(.[][-2:]
显式选择每个数组中的最后两个元素)。这些使用reverse
.一种可能更简单的方法:
通过以正确的顺序选择元素,按照我们想要的顺序显式重写数组:
这将使用原始数组中的元素按照它们被挑选出来的顺序重新创建每个数组。