【问题标题】:Shell script to print system.log file from past hour用于打印过去一小时的 system.log 文件的 Shell 脚本
【发布时间】:2015-01-07 23:23:36
【问题描述】:

我正在尝试在 Mac OS X 上读取 system.log 文件以获取过去一小时内的所有记录。我已经搜索了这里提出的其他问题,但他们的解决方案都不适合我,可能是因为在 Mac OS X 上?

我可以使用awk 命令读取下面代码中两个日期/时间之间列出的所有记录的system.log 文件。然后将其写入文本文件并读取其内容以进行进一步分析。

awk '$0 >= "Nov 11 09:15:00" && $0 <= "Nov 11 10:15:00"' /var/log/system.log > newfile.txt

但是我希望能够使用当前时间和当前时间 - 1 小时自动计算时间。

我已经能够使用此代码显示当前时间和当前时间 - 1 小时。

now=$(date +"%b %d %H:%M:%S")
hourago=$(date -v-60M "+%b %d %H:%M:%S")

但在awk 语句中找不到使用它的方法。

非常感谢任何帮助!

【问题讨论】:

  • awk 中,您可以使用system()strftime()mktime() 函数。阅读this link

标签: macos bash shell awk


【解决方案1】:

尝试类似的方法:

awk 'BEGIN {now=system("date +\"%b %d %H:%M:%S\"")}'

【讨论】:

  • 感谢这项工作。我还添加了代码来显示当前时间 - 1 小时:awk 'BEGIN {hour=system("date -v-60M +\"%b %d %H:%M:%S\"")}'
  • @Tom 你可以用-1h代替-60m
  • 当然这很有意义。现在我有了这两次,是否需要将它们存储为变量并将它们调用到我的 awk 语句中?
【解决方案2】:

你可以试试

awk 'BEGIN {now=strftime("%b %d %T")}'

%T%H:%M:%S 的快捷方式

【讨论】:

  • 我看到一条错误消息,指出 strftime 是一个未定义的函数。感谢%T的提示。
  • 对不起,我不知道Mac OS X 的见解。我认为Mac OS X 上的awk 版本与Linux 版本相同。测试一下%T 在 Mac OS X 上是否可以正常工作。
【解决方案3】:

您可以使用strftime 打印当前时间。以及 strftimesystime 的组合以获取前一小时

例如用法

$ awk 'BEGIN {now=strftime("%b %d %T");hourago=strftime("%b %d %T", systime()-3600); print now, hourago}'
Nov 11 19:11:22 Nov 11 18:11:22

它有什么作用??

  • systime()-3600 systime() 打印自 Epoch 以来经过的秒数。 -3600 减少了一个小时。 strftime 返回与该秒对应的时间,即比当前时间少 1 小时,now

【讨论】:

  • 谢谢。 strftime() 似乎不受支持,因为它显示为未定义的函数。但是我已经修改了代码以使用 system() 代替,这很有效。它还在时间之后打印两个零,为什么会这样?
  • @Tom 您看到的零是system 中给出的命令的退出状态现在system 的问题是您无法将命令的输出获取到变量。它只是执行命令。那是指 A.M.D 的答案 now 变量将包含 0 而不是时间。这是日期命令的退出状态
  • @Tom strftime() GNU gawk 扩展。而不是使用awk,您可以使用gawk,它可以在答案中使用上述脚本。
  • 感谢您提供此信息。 gawk 似乎也不起作用,因为我看到“找不到命令”错误。
  • @Tom 默认情况下 Osx 不提供gawk 你可以下载并安装它
猜你喜欢
  • 1970-01-01
  • 2012-01-23
  • 1970-01-01
  • 2015-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-24
  • 1970-01-01
相关资源
最近更新 更多