在 UNIX 中检查长文本文件的问题

在 UNIX 中检查长文本文件的问题

如果我跑

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}'"

相关内容