Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
File 使用awk(或grep)统计文件中不同数字的出现次数_File_Awk_Count_Grep - Fatal编程技术网

File 使用awk(或grep)统计文件中不同数字的出现次数

File 使用awk(或grep)统计文件中不同数字的出现次数,file,awk,count,grep,File,Awk,Count,Grep,我有一个文件,在每一行中包含不同的值,我想计算出现在特定关键字之后的数字。比如, "fields" : { "referer" : [ "-" ], "@timestamp" : [ "2017-01-08T19:50:19.000Z" ], "uri_path" : [ "test" ], "method" : [ "GET" ], "servername" : [ "INMESPWEB03" ], "useragent" : [ "Medi

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

  "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"]} 

如果您的文件格式是固定的,此awk one liner可能会有帮助:

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

“我想要X”不是一个问题,更不用说编程问题了。你想雇一个程序员吗?不,很抱歉解释错了,对我来说,用c#或java很容易,但我需要创建一个脚本,生成一个包含这些信息的文件,计算数字的出现次数并通过邮件发送,所有这些都在unix服务器上运行的脚本中。这仍然是“我需要X”,不是问题,更不用说编程问题了。@iondevx,单击问题下的“编辑”链接,然后添加到目前为止您编写的需要帮助的代码。@ghoti我添加了我编写的代码谢谢@Kent提供解决方案!