【问题标题】:Count the occurrence of different numbers in file with awk (or grep)使用 awk(或 grep)计算文件中不同数字的出现次数
【发布时间】:2017-05-25 01:49:22
【问题描述】:

我的文件在每一行中包含不同的值,我想计算在特定关键字之后出现的数字的出现次数。例如;

  "fields" : {
    "referer" : [ "-" ],
    "@timestamp" : [ "2017-01-08T19:50:19.000Z" ],
    "uri_path" : [ "test" ],
    "method" : [ "GET" ],
    "servername" : [ "INMESPWEB03" ],
    "useragent" : [ "Mediapartners-Google" ],
    "querystring" : [ "test" ],
    "bytes-sent" : [ "227905" ],
    "cshost" : [ "www.test.com" ],
    "scstatus" : [ "200" ],
    "time-taken" : [ "15468" ]
  }
  "fields" : {
    "referer" : [ "-" ],
    "@timestamp" : [ "2017-01-08T19:50:19.000Z" ],
    "uri_path" : [ "test" ],
    "method" : [ "GET" ],
    "servername" : [ "INMESPWEB03" ],
    "useragent" : [ "Mediapartners-Google" ],
    "querystring" : [ "test" ],
    "bytes-sent" : [ "227905" ],
    "cshost" : [ "www.test.com" ],
    "scstatus" : [ "300" ],
    "time-taken" : [ "15468" ]
  }
  "fields" : {
    "referer" : [ "-" ],
    "@timestamp" : [ "2017-01-08T19:50:19.000Z" ],
    "uri_path" : [ "test" ],
    "method" : [ "GET" ],
    "servername" : [ "INMESPWEB03" ],
    "useragent" : [ "Mediapartners-Google" ],
    "querystring" : [ "test" ],
    "bytes-sent" : [ "227905" ],
    "cshost" : [ "www.test.com" ],
    "scstatus" : [ "200" ],
    "time-taken" : [ "15468" ]
  }

所以结果应该是这样的

  • 200 : 2
  • 300 : 1
  • ... : .

然后是这样的

我想检查“scstatus”之后的每个数字并计算它们并按升序或降序打印。这是我到目前为止写的代码,这个脚本给了我上面的数据

curl -XPOST 'webpage.name.abc' -d { "query": { "filtered": { "query": { "query_string": {
     "analyze_wildcard": true,
     "query": "useragent: \"googlebot\"|\"mediapartners-google\"|\"adsbot-google\""}
 }}},"size": 4000000, "fields": ["@timestamp","servername","uri_path","scstatus","method","cshost","useragent","time-taken","referer","bytes-sent","querystring"]} 

【问题讨论】:

  • "I want X" 不是问题,更不是编程问题。你想聘请程序员吗?
  • 不,抱歉解释错了,我很容易做到 c# 或 java 但我需要创建一个脚本来生成包含这些信息的文件计算数字的出现和通过邮件发送它们,所有这些都在运行在 unix 服务器上的脚本中。
  • 那仍然是“我需要 X”,不是问题,更不是编程问题。
  • @iondevx,点击您问题下方的“编辑”链接,然后添加您目前编写的需要帮助的代码。
  • @ghoti 我添加了我写的代码

标签: file awk count grep


【解决方案1】:

如果您的文件格式是固定的,这个 awk 单行程序可能会有所帮助:

awk -F'"' '$2=="scstatus"{a[$4]++}END{for(x in a)print x,a[x]}' file
200 2
300 1

【讨论】:

  • 感谢@Kent 提供解决方案!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-23
  • 1970-01-01
  • 1970-01-01
  • 2013-12-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多