scp/rsync autocomplete работает в одном направлении, но не в другом

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

Трубопровод нескольких инженерных сетей определенно требует затрат. По сравнению со строковыми операциями эта стоимость очень высока. Однако, если объем данных достаточно велик, решение конвейера может быть быстрее, потому что оно может позволить специализированным инструментам выполнять свою работу быстрее и может допускать параллельную обработку данных (если машина многоядерная и имеется достаточно полезной обработки, которая может делаться параллельно, чтобы было целесообразно). Но если объем данных невелик, затраты на запуск программ преобладают. Момент изменения доминирующего фактора очень зависит от системы и сценария использования.

Вообще говоря, чем универсальнее инструмент, тем он медленнее. Итак, если у вас есть задача, которую может выполнить grep или head , то обычно sed также может это сделать, но не так быстро; а awk будет еще медленнее. Это просто практическое правило; если вы пойдете искать, вы сможете найти конкретные реализации и конкретные рабочие нагрузки, в которых awk или sed превосходят другие инструменты. Объем данных должен быть достаточно большим, чтобы разница вообще была заметна.

Для небольших объемов данных количество запусков процессов является доминирующей стоимостью. Вообще говоря, чем более универсален инструмент, тем медленнее он запускается. Запуск нескольких инструментов сам по себе снижает производительность, потому что это означает, что в память нужно загружать больше кода. Однако, если вы используете BusyBox, где все инструменты сгруппированы в один исполняемый файл, этот аспект сводится к минимуму.

Начиная с

cat file | grep ^field | head -n1 | sed 's/:/ /' | awk '{print $1}'

вызов cat бесполезен и не может улучшить производительность. Использование поля grep ^ | голова -n1 | sed 's /: / /' может иметь небольшое преимущество, если объем данных очень большой, но в большинстве сценариев я бы ожидал, что

<file sed -n '/^field/ { s/:/ /p; q; }'

будет быстрее, потому что он позволяет избежать ожидания нескольких процессов.

Что касается вызова awk, то здесь он просто не нужен. Если нет начальных двоеточий, то команда эквивалентна

<file sed -n '/^field/ { s/:.*//p; q; }'

или, если grep имеет преимущество,

<file grep '^field' | sed -e 's/:.*//' -e 'q'

И если есть ведущие двоеточия, просто добавьте s / ^ :: * // в начале команды sed .

0
03.11.2018, 01:13
1 ответ

Я обнаружил, что пакет решения-bash-completionникогда не устанавливался на ноутбук.

Это вводящая в заблуждение проблема, потому что в .bashrcисточник файла указан правильно, и он не выдает ошибку. Однако файл никогда не существовал.

Однако bashrc проверяет /usr/share/bash -завершение/bash _завершение, которое существует. Почему не работает, не знаю.

sudo apt install bash-completionустраняет проблему.

0
28.01.2020, 04:10

Теги

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