我有一个采用这种格式的test.txt文件
{
"user": "sthapa",
"ticket": "LIN-5867_3",
"start_date": "2018-03-16",
"end_date": "2018-03-16",
"demo_nos": [692],
"service_names": [
"service1",
"service2",
"service3",
"service4",
"service5",
"service6",
"service7",
"service8",
"service9"
]
}
我需要寻找一个名为demo_nos的标签并提供计数。 例如,在上面的文件“ demo_nos”:[692]中,这意味着仅一个演示编号...同样,如果它具有“ demo_nos”:[692,300],则计数为2
那我可以写什么shell脚本来获取并打印计数?
根据标签[]中的值,输出应显示演示编号= 1或2。
即我的shell脚本中有一个名为market_nos的变量,应该给我计数
答案 0 :(得分:1)
从命令行处理JSON数据的黄金标准是jq:
$ jq '.demo_nos | length' test.txt
1
.demo_nos
返回与对象中的demo_nos
键关联的值,并将该数组通过管道传递到length
函数,这很明显。
答案 1 :(得分:1)
我假设您有python并且文件是JSON:)
$ cat some.json
{
"user": "sthapa",
"ticket": "LIN-5867_3",
"start_date": "2018-03-16",
"end_date": "2018-03-16",
"demo_nos": [692],
"service_names": [
"service1",
"service2",
"service3",
"service4",
"service5",
"service6",
"service7",
"service8",
"service9"
]
}
$ python -c 'import sys,json; print(len(json.load(sys.stdin)["demo_nos"]))' < some.json
1
答案 2 :(得分:0)
这不是最优雅的解决方案,但是应该这样做
cat test.txt | grep -o -P 'demo_nos.{0,200}' | cut -d'[' -f2 | cut -d']' -f1 | awk -F',' '{ print NF }'
请注意,这是一种快速而肮脏的解决方案,将输入视为原始文本,而不考虑JSON结构。在特殊情况下,“ demo_nos”字符串也会出现在文件的其他位置,则上述命令的输出可能不正确。