【发布时间】:2015-06-18 04:01:35
【问题描述】:
我正在尝试使多个日志文件的作业输出在 Unix 上更加用户友好。
日志文件从最新的 Web.log 到最旧的 Web.log.30。我正在从这些文件中 grepping job123,然后管道到一个新的 grep,它只需要带有 Exit 消息的行,这意味着作业已经完成。然后我把它剪成逗号,这样我就只打印出时间戳而不是整行。这是我的脚本:
for file in `ls -tr Web.log*`; do grep job123 $file | grep Exit | cut -d "," -f1; done
按时间顺序输出我想要的时间戳:
2015-06-17 21:07:00
2015-06-17 22:07:00
2015-06-17 23:07:00
2015-06-18 00:07:00
2015-06-18 01:07:00
2015-06-18 02:07:00
2015-06-18 03:07:00
我想要做的就是在每一行的开头添加一个回声,说“Script job123 ran at:”,所以它看起来像这样:
Script job123 ran at: 2015-06-17 21:07:00
Script job123 ran at: 2015-06-17 22:07:00
Script job123 ran at: 2015-06-17 23:07:00
Script job123 ran at: 2015-06-18 00:07:00
Script job123 ran at: 2015-06-18 01:07:00
Script job123 ran at: 2015-06-18 02:07:00
Script job123 ran at: 2015-06-18 03:07:00
由于用户几乎不了解 Unix,我只需要使其尽可能易于阅读。我在回声部分苦苦挣扎。
此外,每个日志文件的长度约为 25MB,因此这一系列管道可能会占用内存,因此如果有人对加快速度有任何建议,我们将不胜感激。
请注意,这是在生产服务器上,因此安装其他脚本(如 multigrep)是不可能的。我试图将其作为单行脚本来执行,以使用户的使用更加简单。
有什么方法可以在我当前使用的脚本上回显该文本?我已经尝试过分几个阶段回应它,但没有成功。
谢谢。
【问题讨论】:
-
您可以将其通过管道传输到 awk。
for file inls -tr Web.log*`;执行 grep job123 $file | grep 退出 |剪切 -d "," -f1 | awk '{print "脚本 job123 运行在:"$0}';完成 -
感谢@c4pone,您的解决方案是最快的!
-
别担心,伙计。很高兴我能帮上忙