
Мне было интересно, являются ли grep, sed и awk жизнеспособными инструментами для поиска данных в очень больших файлах.
Допустим, у меня есть файл размером 1 ТБ. Если бы я хотел обработать текст в этом файле, как бы выглядели временные рамки, если бы я использовал отдельные команды grep, sed и awk, а также смешивая их вместе.
Очевидно, что дать конкретный ответ невозможно, поскольку результаты будут зависеть от характеристик оборудования, но если бы я мог получить общую оценку, это было бы полезно.
решение1
В общем, я бы сказал, grep
что самый быстрый, sed
самый медленный. Конечно, это зависит от того, что именно вы делаете. Я нахожу awk
гораздо быстрее, чем sed
.
Вы можете ускорить grep, если вам не нужны настоящие регулярные выражения, а только простые фиксированные строки (опция -F).
Если вы хотите использовать grep, sed и awk вместе в конвейерах, то я бы поместил команду grep первой, если это возможно.
Например, это:
grep -F "foo" file | sed -n 's/foo/bar/p'
обычно быстрее, чем это:
sed -n 's/foo/bar/p' file
Хотя grep
в первой строке это кажется излишним.
Кстати, вы можете ускорить выполнение этих команд, LC_ALL=C
если имеете дело с простыми текстовыми файлами ASCII.
Обратите внимание, что весь мой опыт основан на командах gnu. Вы также можете попробовать разные реализации и сравнить скорость.