有没有简单的方法来插入数据/时间在一个日志文件的前面只是shell脚本?

假设我想在一夜之间监控Java进程的内存使用情况。

我可以做类似的事情

顶部| grep java> out.log

我会得到一大堆线的日志文件。

有没有简单的方法来获得插入每行前面的数据/时间?

不要重新发明轮子。 使用logging器(1)将消息写入系统日志,在几乎所有Unix风格上都支持该logging器 。 系统日志会照顾你的时间戳。 您的日志数据将被存储到系统日志,如/var/log/messages (这是可configuration的)。 以后不用担心清理日志文件(尤其是如果这个作业永远运行),因为系统日志是由logrotate / newsyslog自动旋转的。

 top | grep java | logger -t java_cpuhog 

或者,如果你真的想把它写到你自己的文件中。 但是之后你需要清理文件:

 top | grep java | logger -t java_cpuhog -f /var/log/java-top.log 
 ... | awk -f timetag.awk > ... 

timetag.awk:

 { print "[" strftime() "] " $0 } 

在shell中: top | grep java | while read LINE ; do date "+%F %T ${LINE}" ; done top | grep java | while read LINE ; do date "+%F %T ${LINE}" ; done

你可以创build像stamp含有的东西

 #!/usr/bin/perl -p s/^/localtime()." "/e; 

然后运行

 top -b | grep java | stamp > out.log 

如果您不交互使用,请不要忘记使用top -b 。 当然,顶层已经在每次运行时都会加上一个时间戳。 如果你不一定每行都需要date,那么只需要使用top就可以了,因为它在每次迭代中都加上一个时间戳。 我有时候用这个来获得10秒的样本,整整一天后再回顾一下:

 top -b -d 10 -c -n 8640