我正在尝试制作一个可以观看一些日志的脚本。我有一个请求日志,每个请求格式都这样,
---
id=273482
Result=Error
---
id=342345
Result=Success
---
和第二个日志,其中每行具有请求的ID。我需要现场观看请求日志,并使用第二log进行交叉引用。
tail -f requestLog | awk "BEGIN { RS = "---" } /Error/" | grep --line-buffered id | sed -u ...
i tail -f requestLog,使用尴尬在" ---"上拆分记录,然后将ID行分开。然后,稍后,我将所有这些都传递给SED -U以提取ID和XARGS,以抓住与不良请求相关的行的第二个日志。
问题是结果的出现确实延迟了,因为某些东西(我认为尴尬)正在错误。如何使尴尬读取输入不间断并在每次看到不良记录时冲洗输出?顺便说一句,我正在使用GNU尴尬。
gnu awk具有fflush()
,您可以用来冲洗缓冲区:
.. | awk 'BEGIN { RS = "---" } /Error/ { print; fflush(); }' | ..
随之而来的是,您的行缓冲了管道中的所有阶段。
将来您在管道中还有其他任何程序,这些程序不支持awk fflush
, grep --line-buffered
或 sed -u
,gnu coreutils具有更通用的 stdbuf
,您可以与任何程序一起使用:
.. | stdbuf -o 0 any_other_command | ..
这是修复
tail -f requestLog|awk 'BEGIN{RS="--*"}/Error/{split($1,a,"=");print a[2]}'