我正在调用来自R Markdown的shell程序,就像这样
```{sh}
SomeShellProgram -options
```
并将文件呈现为HTML。计算确实需要一些时间,因此作者包括一个自我更新的进度“栏”,看起来像这样:
45Mb 12.4%935 OTU,3485嵌合体(6.7%)
但是,特别是如果进度缓慢,它将每0.1%左右更新一次。每行都在HTML中单独呈现,最多可以提供1000行进度条。
我不想完全抑制输出,例如在块选项中使用echo=FALSE
。我正在制作一份报告,而且印刷的信息非常重要。
我正在寻找一种黑客,它会以某种方式捕获最后的X行并渲染它们,或者使用grep
或类似的东西来捕获100%
左右的行。
我尝试使用> output.txt
重定向输出,但进度未打印到文件中(尽管有其他信息)。
在没有给出完整示例的情况下,我想不出提供可重现的示例的方法,对不起。
对于那些感兴趣的人:我正在尝试制作一份关于16S Illumina测序数据分析的报告,我正在使用Usearch
,而且让我头疼最多的命令是usearch -cluster_otus
命令。
更新
渲染最后X行还有一个问题:输出中的进度条由^M
(回车字符)分隔,而不是换行符,因此less
仅将其识别为单行。因此,我的最终解决方案包括
2>
的进度条的输出重定向到文件^M
sed
个换行符
less
在mac osx上执行此操作的我的(伪)代码如下(其中X =行数)
FunctionWithProgressBar -option 2> tempfile.tmp
sed -ibak $'s/\x0D/\\\n/g' tempfile.tmp
tail -nX tempfile.tmp
R Markdown中的和 :
```{sh, results="hide"}
FunctionWithProgressBar -option 2> tempfile.tmp
```
```{sh, echo=FALSE}
sed -ibak $'s/\x0D/\\\n/g' tempfile.tmp
tail -nX tempfile.tmp
```
请注意,匹配退格是一个痛苦的对接(特别是在osx上)和平台之间的变化。
答案 0 :(得分:0)
进度条可能位于sterr流中,因此您可以使用" 2>"而不是">"所以你可以分别捕获stderr和stdout,例如:
usearch blablabla 2> only_err > only_stdout
或者如果你想把所有输出放在一起,你必须将stderr重定向到stdout,并做一个追加,如下:
usearch blablabla >> total_output 2>&1
对于R-markdown部分,我无法提供帮助,从未使用过,抱歉。
的问候,
Moritz的