Разработчик Джошуа Роджерс представил открытый проект по названием body. Это bash-скрипт для вывода середины файла вместо head | tail.
«body — это небольшой bash‑скрипт, который заменяет распространённую команду с двумя действиями, которую я время от времени запускаю: head ‑n5000 file.txt | tail ‑n1. По сути, я хочу просмотреть примерно середину файла, чтобы увидеть его содержимое. Я понял, что должен быть способ лучше, и поэтому написал небольшой скрипт, который делает то, что мне нужно: это не head, не tail, а body: для вывода (примерно) середины файла», — пояснил автор решения.
«Как это работает? Существует миллион способов получить содержимое середины файла (середину, измеряемую в символах переноса строки, а не в байтах), и я не был уверен, какой из них будет самым быстрым с помощью простого bash‑скрипта. Поэтому я провёл нагрузочное тестирование. На сервере Linux я запустил следующий скрипт и потом 20 раз и усреднил результаты», — пояснил разработчик.
Использование head | tail в тестах оказалось самым быстрым. Однако Роджерс хотел вывести номера строк, так что это не сработало. Передача вывода cat ‑n (которая выводит номера строк перед каждой строкой файла) в head | tail также была быстрой, но быстрее всего было использовать sed непосредственно для файла. Итак, в простейшем случае body выполняет следующее: sed »$start_line,$end_line»’!d;=’ »$filename» | sed «N;s/n/:/».
«На самом деле скорость выполнения всех этих команд совершенно не важна; В любом случае они будут быстрыми, но интересно посмотреть, какой из них быстрее. Вероятно, это также зависит от размера файла», — подытожил Роджерс.
Источник: habr.com