如何使用awk或sed或cut过滤apache访问日志

时间:2015-05-21 05:45:58

标签: awk sed grep cut

这是我的apache访问日志文件。我希望apache访问日志uniq计数网址。

function checkCollision(e: Event): void {
  if (head_mc.hitTestObject(square2_mc)) {
    velocity = 0;
    trace("Collision detected!");
  } else {
    trace("No collision.");
    velocity = 5;
  }
}

stage.addEventListener(Event.ENTER_FRAME, checkCollision);

上面的文件我给了一个样本。日志文件不断增长      预期产出

$new = array($first,$second);

3 个答案:

答案 0 :(得分:1)

我认为apache日志中可能存在一些拼写错误,但是如何:

$ grep -o 'abc/[^ 0-9]*/' apache.log | sort | uniq -c | sort -r
6 abc/index.php/site/siteContent/
5 abc/index.php/htmlrequest/htmlContent/
5 abc/index.php/Api/ApiContent/
3 abc/index.php/data/dataContent/
2 abc/index.php/contentapi/discontent/
1 abc/index.php/contentapi/

答案 1 :(得分:0)

这提取了第四个字段,它被假定为URL

cat logfile | awk -F' ' '{print $4}' | awk -F'/' '{print $2"/"$3"/"$4"/"$5}' | sort | uniq -c

答案 2 :(得分:0)

使用GNU awk for gensub():

$ awk '{cnt[gensub(/(([/][^/]+){4}[/]).*/,"\\1","",$4)]++} END{for (url in cnt) print url " - " cnt[url]}' file
/abc/index.php/contentapi/discontent/ - 3
/abc/index.php/data/dataContent/ - 3
/abc/index.php/site/siteContent/ - 6
/abc/index.php/Api/ApiContent/ - 5
/abc/index.php/htmlrequest/htmlContent/ - 5