Насколько хорошо grep/sed/awk работают с очень большими файлами?

Насколько хорошо grep/sed/awk работают с очень большими файлами?

Мне было интересно, являются ли 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. Вы также можете попробовать разные реализации и сравнить скорость.

Связанный контент