【问题标题】:Processing log files using bash tools使用 bash 工具处理日志文件
【发布时间】:2012-08-20 13:45:26
【问题描述】:

我有一个 .csv 文件,其中包含大约 10 列正在记录数据。我想使用这样的东西:

How to get the first line of a file in a bash script?

它在哪里抓取每个文件的第一行,然后处理日志。但是,一旦处理了该行,我想将其标记为已处理(可以像在末尾添加一个带有 *** 或其他内容的新列一样简单)。所以基本上,我想抓住第一行未处理的,处理它,然后移动到下一个未处理的行,等等。

我需要使用 sed、awk、grep 和/或其他标准来执行此操作。 bash 脚本将在无限循环中在后台运行。本质上,我正在尝试实时读取和处理此日志文件,但需要该日志作为历史记录。

编辑: 另外,我需要它来标记文件中已读取的行。这样,如果服务器停止,我就可以知道在哪里进行处理。因此,如果我能找到一种方法,tail 就会起作用。

谢谢!

【问题讨论】:

  • 所以你不想要文件中的第一行,而是想要第一行未处理的行?
  • 正确 - 我确实想要第一条未处理的行。 Logrotate 是一种可能性......但就像原始帖子所说的那样,这将运行,我需要尽可能接近实时地获取这些数据。

标签: bash shell sed awk grep


【解决方案1】:

您可以这样做,而不是坐在无限循环中:

tail -n +1 -f your_log_file | some_processing_pipeline

这将从第 1 行开始读取您的日志文件,然后不断等待新行出现并将它们传递给 some_processing_pipeline

【讨论】:

  • 有没有办法让该行在通过后被标记?如果发生系统灾难(或某处的简单错误),我需要将线标记本身作为已处理。否则,该解决方案听起来很棒。
  • 也许在这种情况下你想创建一个新的日志文件,比如Lev Levitsky suggested。我不确定在创建日志文件后编辑它是否明智。
  • 创建新文件的大问题是如果发生某些事情并且日志处理停止,我需要重新启动它,我怎么知道从哪里开始?
  • 您可以告诉您的处理器,如果发生某些事情,请将日志移动到其他位置并开始新的日志。但这可能不像听起来那么容易或明智。
  • 对……在服务器故障、修补重启等情况下……这可能并不总是可行的。因此,我正在寻找某种方法来将行标记为已处理的原因。没有办法将 sed 命令附加到它上面吗?
猜你喜欢
  • 2012-07-22
  • 1970-01-01
  • 2013-07-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多