我想要做的是运行一个命令,将所有输出写入一个文件并显示前 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"
但也许还有更好的?