微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用jq指望多个级别

我们发现了一些与感染有关的域名.现在我们在.json文件中有一个DNS名称列表,我想生成一个汇总输出,显示用户列表,他们访问的唯一域,总计数.如果我也可以计算每个域名的奖励积分.

以下是该文件的示例:

{"machine": "possible_victim01","domain": "evil.com","timestamp":1435071870}
{"machine": "possible_victim01","timestamp":1435071875}
{"machine": "possible_victim01","domain": "soevil.com","timestamp":1435071877}
{"machine": "possible_victim02","domain": "bad.com","timestamp":1435071877}
{"machine": "possible_victim03","timestamp":1435071879}

理想情况下,我希望输出类似于:

{"possible_victim01": "total": 3,{"evil.com": 2,"soevil.com": 1}}
{"possible_victim02": "total": 1,{"bad.com": 1}}
{"possible_victim03": "total": 1,{"soevil.com": 1}}

我很乐意接受:

{"possible_victim01": "total": 3,["evil.com","soevil.com"]}
{"possible_victim02": "total": 1,["bad.com"]}
{"possible_victim03": "total": 1,["soevil.com"]}

我可以获得每个用户的总记录数,但是我丢失了域名列表:

cat sample.json | jq -s 'group_by(.machine) | map({machine:.[0].machine,domain:.[0].domain,count:length}) '
[{"machine": "possible_victim01","count": 3},{"machine": "possible_victim02","count": 1},{"machine": "possible_victim03","count": 1}]

这篇文章描述了如何解决问题的后半部分… JQ Aggregations and Crosstabs.我还没有找到任何描述上半部分的内容,进入:

{"machine": "possible_victim01","count":2}
{"machine": "possible_victim01","count":1}
{"machine": "possible_victim02","count":1}
{"machine": "possible_victim03","count":1}

解决方法

您需要执行两次group_by,一次按计算机名进行分组,然后进行子分组以获取每个域的子计数.

jq查询

group_by(.machine) | map({
    "machine": .[0].machine,"total":length,"domains": (group_by(.domain) | map({
        "key":.[0].domain,"value":length}) | from_entries
    )
})

示例输出

{
  "machine": "possible_victim01","total": 3,"domains": {
    "evil.com": 2,"soevil.com": 1
  }
}
{
  "machine": "possible_victim02","total": 1,"domains": {
    "bad.com": 1
  }
}
{
  "machine": "possible_victim03","domains": {
    "soevil.com": 1
  }
}

原文地址:https://www.jb51.cc/js/150381.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐