仅在R标记中渲染块输出的最后X行
我从R Markdown这样调用一个shell程序仅在R标记中渲染块输出的最后X行,r,shell,r-markdown,R,Shell,R Markdown,我从R Markdown这样调用一个shell程序 ```{sh} SomeShellProgram -options ``` 并将文件呈现为HTML。程序的计算确实需要一些时间,因此作者包括了一个自我更新进度“条”,它看起来像这样: 45Mb 12.4%935个OTU,3485个嵌合体(6.7%) 但是,特别是当进度缓慢时,它将每隔0.1%左右更新这一行。并且每一行都在HTML中单独呈现,HTML最多可以显示1000行进度条 我不想完全抑制输出,例如在块选项中使用echo=FALSE。我正在
```{sh}
SomeShellProgram -options
```
并将文件呈现为HTML。程序的计算确实需要一些时间,因此作者包括了一个自我更新进度“条”,它看起来像这样:
45Mb 12.4%935个OTU,3485个嵌合体(6.7%)
但是,特别是当进度缓慢时,它将每隔0.1%左右更新这一行。并且每一行都在HTML中单独呈现,HTML最多可以显示1000行进度条
我不想完全抑制输出,例如在块选项中使用echo=FALSE
。我正在制作一份报告,打印的信息很重要
我正在寻找一种只捕获最后X行并渲染这些行的黑客,或者使用grep
或类似的方法,只捕获100%
左右的行
我试着用>output.txt
重定向输出,但是没有将进度打印到文件中(尽管其他信息是无效的)
如果不给出完整的例子,我想不出一种方法来提供一个可复制的例子,对此我深表歉意
对于那些感兴趣的人:我正在尝试生成一份关于16S Illumina测序数据分析的报告,我正在使用Usearch
,而最让我头疼的命令是Usearch-cluster_otus
命令
更新
渲染最后X行时还有一个问题:输出中的进度条由^M
(回车符)分隔,而不是由换行符分隔,因此less
仅将其识别为一行。因此,我的最终解决方案包括
2>
将进度条的输出重定向到文件中sed将^M
字符替换为换行符
更少的
```{sh, results="hide"}
FunctionWithProgressBar -option 2> tempfile.tmp
```
```{sh, echo=FALSE}
sed -ibak $'s/\x0D/\\\n/g' tempfile.tmp
tail -nX tempfile.tmp
```
请注意,匹配退格是一件让人头疼的事(特别是在osx上)以及平台之间的变化 进度条可能在strr流中,因此您可以使用“2>”而不是“>”来捕获它,以便可以分别捕获strr和stdout,例如:
usearch blablabla 2> only_err > only_stdout
或者,如果希望将所有输出都放在一起,则必须将stderr重定向到stdout,并进行追加,如下所示:
usearch blablabla >> total_output 2>&1
至于R-markdown部分,我真的帮不上忙,从未使用过,对不起
问候,
Moritz进度条可能在sterr流中,因此您可以使用“2>”而不是“>”来捕获它,以便可以分别捕获stderr和stdout,例如:
usearch blablabla 2> only_err > only_stdout
或者,如果希望将所有输出都放在一起,则必须将stderr重定向到stdout,并进行追加,如下所示:
usearch blablabla >> total_output 2>&1
至于R-markdown部分,我真的帮不上忙,从未使用过,对不起
问候,
莫里茨谢谢莫里茨,它工作得很好。我只需要将
2>
重定向到一个文件,然后我就可以用tail file
只打印最后一行了。Markdown将打印打印到控制台上的所有内容,因为控制台上没有打印任何内容,如果我重定向steer stream,它将完美工作!谢谢莫里茨,它工作得很好。我只需要将2>
重定向到一个文件,然后我就可以用tail file
只打印最后一行了。Markdown将打印打印到控制台上的所有内容,因为控制台上没有打印任何内容,如果我重定向steer stream,它将完美工作!