如果我跑
sudo pico /var/log/lighttpd/website/error.log
我得到一个很长的文件,我看不到最后几行。如果我运行:
sudo tail -f /var/log/lighttpd/website/error.log | awk '{print $1 "--" $2}'
我什么都没得到?我做错了什么?
另外,如何使用 pico 编辑器移动到特定行?
谢谢
答案1
您最好使用一些分页程序,例如less
。它会尝试不将整个文件加载到内存中,因此它非常适合处理大文件。在 less 中,您可以通过键入 123 来移动到特定行,:123
其中 123 是您需要的行号。
至于 tail - 不使用 awk 你能得到什么吗?或者使用sudo tail -n 10 -f <log>
?
答案2
tail 中的标志-f
表示“保持 tail 进程运行,如果文件发生变化,则将其发送到STDOUT
”。基本上,这是一种主动监视日志文件的简洁方法。
我相信管道会等待第一个程序完成写入,STDOUT
然后再将输出放入awk
。由于有-f
标志,tail 永远不会退出(直到您告诉它),因此不会将任何内容输入awk
。因此不会打印任何内容。
尝试第二个不带的命令-f
。如果您正在寻找-f
功能,但也希望使用 awk 破坏输出,我不确定答案是什么,除非编写自定义脚本来执行此操作...
答案3
tail -f
只要文件还存在,它就永远不会退出(我想文件存在之后也是如此)。在第一个进程终止之前,不会有任何进程通过管道。
如果你想要 tail -f 的功能(即监视文件),同时仍然通过 awk 进行管道传输,请尝试watch "tail /var/log/lighttpd/website/error.log | awk '{print \$1 \"--\" \$2}'"