2017-01-10 33 views
-1

我有每行包含不同值的文件,我想要計算特定關鍵字之後出現的數字的出現次數。例如;使用awk(或grep)計算文件中不同數字的出現

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

「*我想X * 「不是一個問題,更不用說編程問題。你想僱傭一名程序員嗎? – melpomene

+0

不,對不起,解釋錯了,我很容易做到這一點c#或java,但我需要創建一個腳本,生成一個文件,其中包含這些信息計數的發生數字,並通過郵件發送,所有在unix服務器上運行的腳本。 – iondevx

+0

這仍然是「*我需要X *」,不是一個問題,更不用說編程問題。 – melpomene

回答

1

數據如果您的文件格式是固定的,這AWK一個襯裏可幫助:

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

謝謝@Kent提供的解決方案! – iondevx