首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >根据值bash获取计数

根据值bash获取计数
EN

Stack Overflow用户
提问于 2018-06-09 18:13:43
回答 3查看 154关注 0票数 1

我在一个文件中有这种格式的数据:

代码语言:javascript
复制
{"field1":249449,"field2":116895,"field3":1,"field4":"apple","field5":42,"field6":"2019-07-01T00:00:10","metadata":"","frontend":""}
{"field1":249448,"field2":116895,"field3":1,"field4":"apple","field5":42,"field6":"2019-07-01T00:00:10","metadata":"","frontend":""}
{"field1":249447,"field2":116895,"field3":1,"field4":"apple","field5":42,"field6":"2019-07-01T00:00:10","metadata":"","frontend":""}
{"field1":249443,"field2":116895,"field3":1,"field4":"apple","field5":42,"field6":"2019-07-01T00:00:10","metadata":"","frontend":""}
{"field1":249449,"field2":116895,"field3":1,"field4":"apple","field5":42,"field6":"2019-07-01T00:00:10","metadata":"","frontend":""}

在这里,每个条目代表一行。我希望获得与字段1中的值相关的行数,如下所示:

代码语言:javascript
复制
249449 : 2
249448 : 1
249447 : 1
249443 : 1

我怎么才能做到这一点?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-06-09 23:40:30

使用awk

代码语言:javascript
复制
$ awk -F'[,:]' -v OFS=' : ' '{a[$2]++} END{for(k in a) print k, a[k]}' file
票数 3
EN

Stack Overflow用户

发布于 2018-06-09 18:17:26

您可以使用jq命令行工具来解释JSON数据。uniq -c计算出现的次数。

代码语言:javascript
复制
% jq .field1 < $INPUTFILE | sort | uniq -c
      1 249443
      1 249447
      1 249448
      2 249449

(在带有zsh的Linuxxubuntu18.04上使用jq 1.5-1-a5b5cbe测试)

票数 2
EN

Stack Overflow用户

发布于 2018-06-10 01:07:29

这是一个高效的jq-only解决方案:

代码语言:javascript
复制
reduce inputs.field1 as $x ({}; .[$x|tostring] += 1)
| to_entries[]
| "\(.key) : \(.value)"

调用:jq -nrf program.jq input.json

(请特别注意-n选项。)

当然,如果计数的对象表示令人满意,那么可以简单地写下:

代码语言:javascript
复制
jq -n 'reduce inputs.field1 as $x ({}; .[$x|tostring] += 1)' input.json
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50773151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档