【问题标题】:Sorting an email log file from the last 2 years. Trying to find unique entries by user email对过去 2 年的电子邮件日志文件进行排序。尝试通过用户电子邮件查找唯一条目
【发布时间】:2014-09-22 12:35:28
【问题描述】:

我正在尝试对电子邮件日志文件进行排序。文件的每一行如下所示:

deliver(jsmith): May 17  >: saved mail to INBOX
deliver(bdillon): May 17  >: saved mail to INBOX

jsmith 和 bdillon 是电子邮件。

基本上我想做的是修剪这个文件,只显示一个 jsmith 实例。那么如果 jsmith 在 5 月 17 日发送了多封电子邮件,我将如何删除除其中一行之外的所有邮件?

我想为每个电子邮件条目执行此操作,因此 jsmith、bdillon、tjones 等只有一个条目...

【问题讨论】:

  • 您必须向后读取文件,直到您点击 1 月 1 日,否则您将永远无法判断您点击了哪个 1 月 1 日。
  • 我会在 Vim 中这样做吗?这是一个相当大的文件。它有 4 亿行。
  • 0G?Jan 01,基本上。转到文件末尾,然后向后搜索 Jan 01。但是您正在尝试对文件进行统计,并且 vim 是一个文本编辑器。
  • 那么最好的方法是什么?我对终端命令没问题,但我还是个新手。
  • 获得一个更好的日志系统,以便包括全年?这将简化所有这一切。

标签: sorting unix sed terminal grep


【解决方案1】:

由于您现在删除了 2014 年 1 月 1 日之前的所有行。您现在可以假设电子邮件和日期之间的所有匹配项对于 2014 年都是唯一的。这样的事情应该足以找到所有唯一的条目。

grep -o -P "\w+\((\w|\d)+\):\s+\w+\s+\d+" yourfile | sort | uniq > newfile

注意:

  • -o 表示只保留 grep 在该行找到的内容,

  • -P 表示使用 perl 风格的正则表达式。该字符串是一个perl 正则表达式匹配 deliver(bdillon): May 17 的文本,

  • sort 对行进行排序,

  • uniq 删除重复项

这是假设您只想要一个具有唯一条目的日志,例如

deliver(bdillon): May 17
deliver(jsmith): May 17

如果还需要该消息,请删除 grep 并只对文件进行 cat 处理,或直接对其调用 sort。

【讨论】:

    猜你喜欢
    • 2013-11-10
    • 1970-01-01
    • 1970-01-01
    • 2011-03-21
    • 2016-09-16
    • 2013-08-17
    • 1970-01-01
    • 2022-01-13
    • 1970-01-01
    相关资源
    最近更新 更多