gpt4 book ai didi

linux - 将连续流通过管道传输到多个文件

转载 作者:太空狗 更新时间:2023-10-29 12:35:59 25 4
gpt4 key购买 nike

我有一个程序会持续运行,将输出写入标准输出,我想不断地从中获取最后一组输出并将其写入文件。每次出现一组新的输出时,我都想覆盖同一个文件。

例如以下命令:

iostat -xkd 5

每 5 秒打印一些输出,每个输出后有一个空行。我希望将最后一个“集合”写入文件,我认为这应该可以通过一些简单的事情来实现。

到目前为止,我已经尝试过使用 xargs,我只能用一行来做到这一点,而不是用某些东西分隔的一组行。

我认为 awk 可能是可行的,但我不知道如何让它缓冲数据,以便它可以使用系统将其写出,或者让它关闭并重新打开相同的输出文件。

编辑:澄清一下,这是一个将连续运行的命令。我不想启动新命令并读取它的输出。

解决方案

我改编了@Bittrance 的答案以获得以下内容:

iostat -xkd 5 | (while read r; do
if [ -z "$r" ]; then
mv -f /tmp/foo.out.tmp /tmp/foo.out
else
echo "$r" >> /tmp/foo.out.tmp
fi
done)

这基本上是相同的,除了检测“部分”的结尾并写入临时文件以便每当外部进程尝试读取输出文件时它都会完成。

最佳答案

部分答案:

./your_command | (while read r ; do 
if ... ; then
rm -f foo.out
fi
echo $r >> foo.out
done)

如果有一个条件(...)使您知道您正在接收“集合”的第一行,这将起作用。

关于linux - 将连续流通过管道传输到多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11459406/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com