【问题标题】:Need to extract data from log files and print to another file, then look for uniqueness需要从日志文件中提取数据并打印到另一个文件,然后寻找唯一性
【发布时间】:2012-09-23 15:02:45
【问题描述】:

我有来自 http 访问日志的数据,我需要执行以下操作:

  1. 在特定目录的所有文件中搜索模式
  2. 将该数据写入另一个文件
  3. 检查新文件的唯一性并删除重复条目

数据如下所示:

<IP address> - - [09/Sep/2012:17:35:39 +0000] "GET /api/v1/user/followers?user_id=577670686&access_token=666507ba-8e88-423b-83c6-9df44bee2c8b& HTTP/1.1" 200 172209 <snip>

我对 user_id=577670686 的数字部分特别感兴趣,我想将其打印到新文件中(我还没有尝试过该部分)...

我尝试使用 sed,但我并没有真正尝试操作数据,所以它看起来非常笨拙....查看 awk,但数据并不是真正基于列的,$#指定对这些数据不起作用(它应该是 10 美元,对吗?)而且,我看不出有什么方法可以摆脱使用 $# 产生的部分数据。有人建议我使用 perl,所以我查看了 google 中的示例,但这对我来说太陌生了。有什么建议吗?

【问题讨论】:

    标签: http parsing logging server


    【解决方案1】:

    使用sed 提取相关部分,然后使用sortuniq 对进行报告:

    $ sed -r 's/.*user_id=([0-9]+)&.*/\1/' access.log | sort | uniq -c
    

    这将打印所有唯一的 user_id 值以及出现的总数。

    【讨论】:

    • 感谢 Tomasz...感谢您的耐心等待。当我将其输出到文件时,我得到的结果看起来像你说的我会得到的结果,但我希望 user_id=xxxxxxx 的 # 与查看日志时看到的 # 不匹配显示数字,例如:100000007556054。我在日志中的内容更接近我最初发布的内容:577670686。这就是我试图获取唯一列表的值。此外,在列表之后是​​很多看起来像排序/唯一数字运算的东西。知道如何摆脱它吗?
    • @MikeRyan:我在上面的示例行中尝试了我的脚本,它精确提取:1 577670686 - 577670686 id 出现一次。您能否发布更多示例行,以便我可以在更大的数据集上尝试我的代码? sort | uniq 也用于...排序和提取唯一值(计算它们)
    • 好的,为了保护隐私,我在每行末尾删除了一些数据,但我希望这不是导致我的问题的原因,但这里还有几行:
    • 166.147.72.24 - - [02/Oct/2012:19:03:17 +0000] "GET /api/v1/user/following?user_id=100002134489709&access_token=8cbe4ca7-9322-4d93-a978 -044275d07eb5& HTTP/1.1" 200 2"-" 66.87.7.182 - - [02/Oct/2012:19:03:12 +0000] "GET /api/v1/user/followers?user_id=635145747&access_token=4e992125-66dc- 498b-aa45-39b7f76f6a3f HTTP/1.1" 200 9349 "-" 我得到了所有以 10000 开头的条目,如第一个条目,但我没有得到像第二个条目这样的条目......
    • 我不知道为什么它不会将最后一篇文章中的行分开....IP地址处的新行(我应该编辑掉)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-01-03
    • 2021-01-21
    • 2016-07-05
    • 1970-01-01
    • 2015-10-17
    • 2020-11-30
    • 2023-03-16
    相关资源
    最近更新 更多