2016-01-13 2 views
1

нагрузить ли опция --slurp весь ввод в память перед обработкой его или она была оптимизирована как-то для того, чтобы избежать этого?использование памяти --slurp опции JQ в

+0

Это может быть достаточно умным, чтобы знать, что если у вас есть тривиальный фильтр ('' .''), он будет знать, что это не понадобится. Но в общем, я бы этого не ожидал. Даже если бы это было возможно, как бы вы ожидали этого в целом? –

+0

Например, фильтры, такие как 'add' и' length', могут работать без необходимости одновременного нахождения всего файла в памяти. Я использую jq много с такими фильтрами. Я мог бы «вводить» вход, хотя это немного более громоздко. У меня нет общего ожидания, меня больше интересуют практические подробности. – memeplex

+0

Jeff - С --slurp, даже "." требует полного анализа всех входных данных (например, jq должен проверить, что вход все действителен, прежде чем он может начать что-то испускать). Основной альтернативой --slurp является «map/reduce»; например, jq может быть вызван отдельно для карты и сокращения операций. – peak

ответ

2

Ответ на этот вопрос по существу «да». Такие команды, как «jq --slurp. FILE ....», хранят анализируемый вход в виде массива в памяти. Для этого часто требуется больше памяти, чем размер самого входа - рассмотрим, например, что объекты JSON хранятся в виде хеш-таблиц.

С JQ 1.5 часто есть лучшие альтернативы, чем «прихлебывая» на входе. В частности, может быть, inputs фильтр работает очень хорошо с reduce и foreach. (Если вы используете inputs, тогда не забывайте, что вы, вероятно, захотите вызвать jq с опцией «-n».)

Смежные вопросы