将程序的输出附加到文件并使用管道显示前 n 行

将程序的输出附加到文件并使用管道显示前 n 行

我想要做的是运行一个命令,将所有输出写入一个文件并显示前 n 行。

在此示例中,n=10

我不太喜欢的一个解决方案是:

./program > tempfile ; cat tempfile >> thefile ; head -n 10 tempfile

我尝试的是

./program | tee -a thefile | head -n 10

然而这里的问题是,./program 过早终止

有没有什么技巧可以不创建中间临时文件?(比如 head 命令只显示前 n 行,但继续默默读取其余部分)

重现管道和头部问题的一种方法是:

n=0 ; while [[ $n -lt 200 ]] ; do echo ======================== $n ; n=$((n + 1)) ; done | tee -a toto | head -n 3 ; echo "-" ; tail -n 200 toto

事实上对我来说,文件的最后一行toto是随机的并且会变化,但几乎从来都不是第 199 行。

答案1

嗯,回答我自己的问题。

n=10
./program | tee -a thefile | sed -n "1,${n}p"

但也许还有更好的?

相关内容