gnu Awk中的缓冲记录



我正在尝试制作一个可以观看一些日志的脚本。我有一个请求日志,每个请求格式都这样,

---
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 fflushgrep --line-bufferedsed -u,gnu coreutils具有更通用的 stdbuf,您可以与任何程序一起使用:

.. | stdbuf -o 0 any_other_command | ..

这是修复

tail -f requestLog|awk 'BEGIN{RS="--*"}/Error/{split($1,a,"=");print a[2]}'

相关内容

  • 没有找到相关文章

最新更新