Хранение более длинного текстового вывода в памяти в переменных оболочки vs Запись на диск

У меня есть нижний вызов инструмента командной строки базы данных db2 внутри цикла, который запускает итерации 100 КБ.

(выход из db2 составляет 5 строк по 20 символов на каждый вызов, всего около 100 тыс. вызовов. Вход в SP префикс к выходной строке из SP и сбрасывается в файл журнала.)

while read line do db2 -x "call stored_procedure_XYZ($line)" |sed "s/^/$line/" >>log_file.txt done<$infile 

Я стараюсь, чтобы все это выполнялось быстрее, вынимая sed и диск изнутри. Целесообразно хранить весь вывод в переменной, а затем модифицировать и записать его на диск?

Какова будет длина переменной оболочки?

(bash, aix 6.1)

One Solution collect form web for “Хранение более длинного текстового вывода в памяти в переменных оболочки vs Запись на диск”

Размер переменной Bash не является фиксированным. Очень вероятно, что произвольные объемы данных сохраняются до тех пор, пока malloc может найти достаточную память и непрерывное адресное пространство. Предположим, вы сохранили большой объем данных в своей переменной. Когда вы пытаетесь записать данные на свою файл, возможно, вы получите ошибку примерно так

 /bin/echo ${LARGE_DATA} >> ${YourFile} /bin/echo: Argument list too long 

Эта ошибка связана с максимальной длиной аргумента команды. Проверьте лимиты на размер аргументов и раздел среды, который указан на странице execve man http://man7.org/linux/man-pages/man2/execve.2.html.

«… память, используемая для хранения строк окружения и аргументов, была ограничена 32 страницами (определенными константой ядра MAX_ARG_PAGES). На архитектурах с размером страницы 4 КБ это дает максимальный размер 128 КБ …»

РЕДАКТИРОВАТЬ:

Также обратите внимание, что приведенная выше ошибка для / bin / echo является просто примером, и вы можете получить аналогичную ошибку, когда вы пытаетесь использовать другие способы при записи файла. Это размер аргумента.

ПРЕДЛОЖЕНИЕ:

Если мы думаем, что запись в файловые операции атомарно, каждый раз, когда труба генерируется для записи, дескрипторы файлов открываются и закрываются. Это занимает некоторое время. Вместо использования / bin / echo или других вы можете написать свою собственную программу «WriteFile», язык более высокого уровня, такой как C / C ++. Что нужно для перенаправления ввода-вывода.

  1. Открыть файловый дескриптор
  2. Запись данных
  3. Закрыть дескриптор файла
  4. Оптимизируйте свой код
  5. Готово

    Проверьте системные вызовы, такие как ssize_t write (int fd, const void * buf, size_t count);

    http://linux.die.net/man/2/write

  • Есть ли способ сказать, был ли сценарий оболочки убит сигналом 9
  • Сохранение целочисленных значений из строки в rrd
  • Почему обязательные утилиты POSIX не встроены в оболочку?
  • Вычислить разницу дат между последней измененной датой файла и СЕЙЧАС с использованием сценария оболочки
  • Удалите все файлы в каталогах, кроме тех, чей путь указан в файле
  • Вставить новую строку со значением, когда значение не найдено вообще
  • Как выполнить несколько команд во вновь открытом терминале?
  • разделение строки в скрипте bash
  • Какие типы интерполяции строк поддерживает POSIX sh?
  • Что означает различие с фигурными фигурными скобками?
  • Скопируйте имена файлов и добавьте префикс пути в каталог, рекурсивный
  • Linux и Unix - лучшая ОС в мире.