печать нескольких отдельных изображений на одной физической бумажной странице с помощью терминала

Сначала преобразуйте файл recon.txt в формат, который можно быстро использовать для grep -F:

perl -pe 's/,/| version=/' recon.txt > recon.grep-F

Тогда ваша ситуация будет описана на https://www.gnu.org/software/parallel/man. html # ПРИМЕР: -Grepping-n-lines-for-m-regular-expressions

Здесь текст адаптирован для вашей задачи:

Простейшее решение grep большого файла для большого количества регулярных выражений:

grep -f regexps.txt bigfile

Или, если регулярные выражения представляют собой фиксированные строки:

grep -F -f recon.grep-F worker.log

Есть 2 ограничивающих фактора: ЦП и дисковый ввод-вывод. ЦП легко измерить: если grep занимает> 90% ЦП (например, при работе на вершине), то ЦП является ограничивающим фактором, и распараллеливание ускорит это. Если нет, то дисковый ввод-вывод является ограничивающим фактором, и в зависимости от дисковой системы распараллеливание может быть быстрее или медленнее. Единственный способ узнать наверняка - это измерить.

Если центральный процессор является ограничивающим фактором, необходимо выполнить распараллеливание регулярных выражений:

cat recon.grep-F | parallel --pipe -L1000 --round-robin grep -F -f - worker.log

Если строка соответствует нескольким регулярным выражениям, строка может быть продублирована. Команда запускает один grep для каждого ЦП и читает большой файл один раз для ЦП, но поскольку это выполняется параллельно, все чтения, кроме первого, будут кэшироваться в ОЗУ. В зависимости от размера regexp.txt может быть быстрее использовать --block 10m вместо -L1000. Если regexp.txt слишком велик для размещения в ОЗУ, удалите --round-robin и настройте -L1000. Это приведет к тому, что bigfile будет прочитан больше раз.

Некоторые системы хранения работают лучше при параллельном чтении нескольких фрагментов. Это верно для некоторых систем RAID и некоторых сетевых файловых систем. Чтобы распараллелить чтение большого файла:

parallel --pipepart --block 100M -a worker.log -k grep -F -f recon.grep-F

Это разделит большой файл на блоки по 100 МБ и запустит команду grep для каждого из этих блоков. Чтобы распараллелить чтение bigfile и regexp.txt объединить их с помощью --fifo:

parallel --pipepart --block 100M -a worker.log --fifo cat recon.grep-F \
\| parallel --pipe -L1000 --round-robin grep -f - {}

Если строка соответствует нескольким регулярным выражениям, строка может быть продублирована.

3
12.08.2016, 11:55
3 ответа

Вместо того, чтобы использовать lpнапрямую, вы можете попробовать использовать imageMagick, чтобы сделать одно изображение из двух или более изображений, а затем распечатать их

convert image1.png image2.png image3.pgn -append output.png

поместит изображения одно над другим. Если вы замените -appendна +append, изображения будут располагаться стороной -на стороне -.

4
27.01.2020, 21:22

lp не знает о файлах изображений; он может перенести это на драйверы для конкретных устройств , используя опции, которые реализуют функции, которые "вероятно" будут поддерживаться множеством устройств. На странице руководства lp нет списка подходящих вариантов для ваших целей.

Вместо этого, если вы хотите, чтобы на одном листе бумаги отображалось несколько файлов изображений, вы можете сделать это, комбинируя изображения в одностраничные изображения в нужном вам порядке. Для этого пригодятся такие программы, как ImageMagick.

Дополнительная литература:

0
27.01.2020, 21:22

Альтернативным методом принятого ответа является использование команды ImageMagick montage, которая обеспечивает дополнительную гибкость при определении размера сетки (плитки ):

montage -tile 1x2 -mode concatenate *.png page.png

Команда создаст несколько страниц -*коллажей.png для каждого набора входных файлов, которые помещаются на одной странице.

2
30.06.2021, 06:43

Теги

Похожие вопросы