我有一个不断更新的巨大日志文件(MainLog)。
我想创建另一个文件,它只是日志文件的最后n行,但也在更新。
如果我使用:
tail -f MainLog> RecentLog
我得到了我想要的东西,除了RecentLog被写为MainLog可用,并且可能在任何时候只有最后一条MainLog线的一部分。
如何在WHOLE行可用时指定尾部我只想写它?
答案 0 :(得分:1)
默认情况下,tail会输出整行,除非您使用-c开关来计算字符数。像
这样的东西 tail -n 20 -f MainLog > RecentLog
(将你想要的第二个文件前面的行数替换为" 20")应该可以正常工作。
但是,如果不是,那么使用grep对行缓冲输出可能会解决这个问题。请参阅this question。
答案 1 :(得分:1)
经过多次尝试,多个文件的唯一解决方案对我来说非常有效({3}}命令。它是一个小二进制文件,它读取多个文件描述符并将数据打印到stdout linewise。
我的用例是在后台生成多个长时间运行的loopback:security:*
命令并跟随它们的输出,而不会出现乱码或中断的行。