Amo*_*pir 4 linux bash awk mawk
系统:Linux 4.13.0-43-generic #48~16.04.1-Ubuntu BASH_VERSION='4.3.48(1)-release'
命令:
while sleep 5
do
date +%T
done | awk -F: '{print $3}'
Run Code Online (Sandbox Code Playgroud)
应打印“日期”输出的第三个字段(秒),每 5 秒一行。问题:仅当管道缓冲区已满时,awk 才从管道读取数据并处理其输入。即当生成超过 4K 的输入时。
当awk被cat替换时,按预期每 5 秒打印一行。
这段代码是从一个在其他系统上运行良好的 shell 脚本简化而来的,所以这个系统中肯定有一些关于 bash、awk 及其配置的内容。
简而言之,有没有办法说服awk在从管道读取数据时表现得像cat一样?
@Ed Morton:我确实尝试在每次打印后添加fflush(),但它不起作用——这表明问题出在 awk 的输入上,而不是输出上。我还尝试添加对system("date")的调用,这表明 awk 确实一次获取所有输入行,而不是在生成它们时立即获取。
对于那些提问的人:
$ awk -W version
mawk 1.3.3 Nov 1996, Copyright (C) Michael D. Brennan
compiled limits:
max NF 32767
sprintf buffer 2040
Run Code Online (Sandbox Code Playgroud)
在尝试找出如何使awk打印其版本时,我发现它确实是mawk,并且它具有以下标志:
-W interactive -- sets unbuffered writes to stdout and line buffered reads from stdin.
Records from stdin are lines regardless of the value of RS.
Run Code Online (Sandbox Code Playgroud)
这似乎解决了问题!
感谢所有回复者。
归档时间: |
|
查看次数: |
2238 次 |
最近记录: |