我有以下格式的文件:
{"report":[{"call_time":"2018-03-31 00:10:13","number":"01232802624","CLI":"7941232455","name":null,"destination": null,"status":"Answered","duration":"27:30"}, {"call_time":"2018-03-31 00:12:21","number":"01233802632","CLI" :"7831233003","name":null,"destination":null,"status":"Answered","duration":"7:48"}, {"call_time":"2018-03-31 00:51 :16","number":"0123802642","CLI":"7711123367","name":null,"destination":null,"status":"Answered","duration":"0:57"} , {"通话时间":"2018-03-31 01:50:33","number":"012342802624","CLI":"7812386544","name":null,"destination":null,"status":"Answered","duration ":"9:54"}, {"call_time":"2018-03-31 16:29:38","number":"01232802642","CLI":"7741230002","name":null," destination":null,"status":"Answered","duration":"0:13"}],"summary":{"Total_Calls":"3,862","Answered_Calls":"3,834","Answered": "3,922:58","Calls_Answered":"99.1%","ACD":"8:00"},"result":1}7812386544","name":null,"destination":null,"status":"Answered","duration":"9:54"}, {"call_time":"2018-03-31 16:29:38 ","number":"01232802642","CLI":"7741230002","name":null,"destination":null,"status":"Answered","duration":"0:13"}], "summary":{"Total_Calls":"3,862","Answered_Calls":"3,834","Answered":"3,922:58","Calls_Answered":"99.1%","ACD":"8:00"} ,"结果":1}7812386544","name":null,"destination":null,"status":"Answered","duration":"9:54"}, {"call_time":"2018-03-31 16:29:38 ","number":"01232802642","CLI":"7741230002","name":null,"destination":null,"status":"Answered","duration":"0:13"}], "summary":{"Total_Calls":"3,862","Answered_Calls":"3,834","Answered":"3,922:58","Calls_Answered":"99.1%","ACD":"8:00"} ,"结果":1}"number":"01232802642","CLI":"7741230002","name":null,"destination":null,"status":"Answered","duration":"0:13"}], "summary ":{"Total_Calls":"3,862","Answered_Calls":"3,834","Answered":"3,922:58","Calls_Answered":"99.1%","ACD":"8:00"},"结果":1}"number":"01232802642","CLI":"7741230002","name":null,"destination":null,"status":"Answered","duration":"0:13"}], "summary ":{"Total_Calls":"3,862","Answered_Calls":"3,834","Answered":"3,922:58","Calls_Answered":"99.1%","ACD":"8:00"},"结果":1}1%","ACD":"8:00"},"结果":1}1%","ACD":"8:00"},"结果":1}
我需要为每个“数字”(最好是最新的 10 个项目)过滤除最新的十行之外的所有内容,并打印平均持续时间。
预期输出类似于:
2018-03-31 00:10:13 01232802624 27:30
01232802624 Average 27:30
2018-03-31 00:12:21 01233802632 7:48
01233802632 Average 7:48
2018-03-31 00:51:16 0123802642 0:57
2018-03-31 16:29:38 0123802642 0:13
0123802642 Average: 0:30
等等
欢迎提出任何想法......我已经尝试了几个小时使用 sed、grep 和 awk,但无法做到这一点......我的代码和结果到处都是。我正在努力在网上找到任何解决方案。
jq是处理 JSON 的强大工具。它在jq Manual 中有很好的文档。
jq 对解析持续时间的支持有点缺乏,所以你可能不得不在那里使用其他东西,而且我不确定你想要的确切输出格式,所以我没有给出完整的解决方案。
这是一个例子,也许它可以帮助你朝着正确的方向前进:
$ jq '.report | group_by(.number) | .[][-10:] | [.] | map({number: .[0].number, calls: map({call_time: .call_time, duration: .duration})}) | .[]' < data
{
"number": "01232802624",
"calls": [
{
"call_time": "2018-03-31 00:10:13",
"duration": "27:30"
}
]
}
{
"number": "01232802642",
"calls": [
{
"call_time": "2018-03-31 16:29:38",
"duration": "0:13"
}
]
}
{
"number": "01233802632",
"calls": [
{
"call_time": "2018-03-31 00:12:21",
"duration": "7:48"
}
]
}
{
"number": "012342802624",
"calls": [
{
"call_time": "2018-03-31 01:50:33",
"duration": "9:54"
}
]
}
{
"number": "0123802642",
"calls": [
{
"call_time": "2018-03-31 00:51:16",
"duration": "0:57"
}
]
}
解释:
.report
: 取report
根对象的keygroup_by(.number)
:number
按键值分组.[][-10:]
:对于每组 ( .[]
),仅保留最后 10 项 ( [-10:]
)[.]
: 嵌套在一个数组中以使下一个命令愉快map(...)
: 将组数组映射到对象数组.[]
删除不必要的嵌套这是另一种变体,以制表符分隔输出:
$ jq -r '.report | group_by(.number) | .[][-10:] | map([.number, .call_time, .duration]) | .[], [] | join("\t")' < data
01232802624 2018-03-31 00:10:13 27:30
01232802642 2018-03-31 16:29:38 0:13
01233802632 2018-03-31 00:12:21 7:48
012342802624 2018-03-31 01:50:33 9:54
0123802642 2018-03-31 00:51:16 0:57
解释:
.report
: 取report
根对象的keygroup_by(.number)
:number
按键值分组.[][-10:]
:对于每组 ( .[]
),仅保留最后 10 项 ( [-10:]
)map(...)
: 将对象映射到数组项.[], []
: 添加一个额外的数组以在组之间创建空间join("\t")
: 用制表符连接每个数组的元素本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句