Мы знаем, что можем получить второй столбец нужной строки из файла, используя эти два метода:
awk '/WORD/ { print $2 }' filename
или
grep WORD filename| cut -f 2 -d ' '
Мои вопросы:
- Каковы различия между двумя командами выше?
- Какой из них имеет лучшую производительность?
- Каковы преимущества использования
awk
над использованиемcut
, и наоборот? - Какие варианты
awk
дает нам сноваcut
и наоборот?
awk
grep
performance
cut
Сетевик
источник
источник
echo filename
илиcat filename
?Ответы:
Наиболее заметная разница между вашими двумя строками будет зависеть от ввода.
cut
принимает один символ в-d
качестве разделителя полей (по умолчанию это TAB), и каждое вхождение этого символа начинает новое поле.awk
, однако, является более гибким. Разделитель находится вFS
переменной и может быть пустой строкой (каждый входной символ представляет собой отдельное поле), одним символом или регулярным выражением. Особый случай одиночного пробела (по умолчанию) означает разбиение на любую последовательность пробелов. Такжеawk
подавляет пробелы по умолчанию.Пожалуйста, сравните:
Здесь
awk
разделяется на последовательность пробелов междуabc
и,def
тогда какcut
принимает каждый пробел в качестве разделителя.То, что вы принимаете, будет зависеть от того, чего вы хотите достичь. В противном случае, я бы ожидал, что
cut
это будет быстрее, так как это небольшой, специализированный инструмент, в то время как онawk
имеет свой собственный язык программирования.источник
cut
скорее всего, будет быстрее, чем один Awk , но не уверен, чтоgrep ... | cut
он будет быстрее, чем чистый Awk.Вообще говоря, чем более специализированный инструмент, тем он быстрее. Таким образом, в большинстве случаев вы можете ожидать
cut
иgrep
быть быстрееsed
, иsed
быть быстрее, чемawk
. Если вы сравниваете более длинные конвейеры более простых инструментов с одним вызовом более сложного инструмента, практического правила не существует. Это имеет значение только при больших входах (скажем, миллионах строк); для коротких входов вы не увидите никакой разницы.Преимущество более сложных инструментов, конечно, в том, что они могут делать больше вещей.
Ваши команды используют кошку без необходимости. Вместо этого используйте перенаправление (особенно если вы беспокоитесь о скорости, хотя вам, вероятно, не стоит беспокоиться о скорости, пока вы не выполните тесты производительности).
Эти команды почти эквивалентны. Различия:
grep -E
имеют почти идентичные синтаксисы регулярных выражений (расширенные регулярные выражения).cut -d ' '
рассматривает каждый отдельный пробел как разделитель. Разделителем Awk по умолчанию является любая последовательность пробелов, которая может состоять из нескольких пробелов, табуляции и т. Д. Вы не можете использовать произвольные последовательности пробелов в качестве разделителейcut
. Для того, чтобы использовать отдельные пробелы в качестве разделителей в AWK, установите разделитель полей в регулярное выражение , которое соответствует единое пространство, кроме регулярного выражения , состоящего из одного пространства (которое является частным случаем означает «любая последовательность пробелов», то есть по умолчанию):awk -F '[ ]' '/WORD/ {print $2}'
.Ru Первое правило оптимизации программы: не делайте этого. Второе правило оптимизации программы (только для экспертов!): Пока не делайте этого. - Майкл А. Джексон
источник
Ваша команда,
Вам даже не нужна
cat
команда. Вы можете попробовать,И приведенная ниже команда перенаправляет вывод с cat на grep, а затем на обрезку,
Скорее всего, мы должны избегать перенаправления вывода. Awk выполняет работу в одну строку, но ему
cut
нужнаgrep
команда, чтобы получить только строки, содержащие определенное слово, и он печатает столбец 2 в соответствии с пробелом.Вы можете делать вещи в awk, если вырезать не удается.
источник
grep WORD filename
.