Я зову программу оболочки из R Markdown как этоттолько рендеринг последние X строк вывода чанка в R Markdown
```{sh}
SomeShellProgram -options
```
и сделать файл как HTML. Расчет программа займет некоторое время, для чего автор включил самообновлению прогресса «бар», который выглядит примерно так:
45MB 12,4% 935 ОТА, 3485 химер (6,7%)
Однако, особенно если прогресс идет медленно, он обновит эту строку каждые 0,1% или около того. И каждая строка визуализируется отдельно в HTML, который может доходить до 1000 строк индикаторов выполнения.
Я не хочу полностью отключать выход, например. с echo=FALSE
в вариантах куска. Я делаю отчет, и информация, которая напечатана, важна.
Я ищу хак, который каким-то образом будет захватывать только последние строки X и отображать их, или, может быть, использовать grep
или что-то подобное только для захвата строк, которые имеют 100%
или около того.
Я попытался перенаправить вывод с > output.txt
, но прогресс не был напечатан в файле (хотя была иная информация).
Я не могу придумать способ предоставления воспроизводимого примера, не приводя полного примера, извините за это.
Для тех, кому это интересно: Я пытаюсь подготовить отчет по анализу данных секвенирования 16S Illumina, и я использую Usearch
, а команда, которая дает мне больше всего головной боли, - это команда usearch -cluster_otus
.
UPDATE
Существует еще одна проблема с оказанием последних X строк: Строка прогресса в выходе ограниченного ^M
(символы возврата каретки), а не разрывы строк, поэтому less
только распознает его как одна строка. Поэтому мое окончательное решение включает в себя
- перенаправив вывод из строки состояния с
2>
в файл - заменяя
^M
символов с разрывами строк, используяsed
- рендеринга последних X строк с
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) и изменения между платформами.
благодаря Moritz, она прекрасно работает. Мне просто нужно перенаправить '2>' в файл, а затем я могу напечатать только последнюю строку с 'tail file'. Markdown напечатает все, что напечатано на консоли, и поскольку ничего не будет напечатано на консоли, если я перенаправляю поток рулевого управления, он отлично работает! – Latrunculia