Как запустить awk для некоторого количества строк.?


18

Я хочу извлечь несколько строк с awk. Можно ли выполнить следующую задачу:

ls -l | awk 'BEGIN FOR(i=122;i<=129;i++) FNR==i'

Как я могу отобразить детали из номеров строк от 122 до 129?


Если бы вы делали это в цикле, я бы предложил sedметод, так sedкак он намного меньше (и загружается быстрее), чем awk.
Зрайм

Ответы:


36

Вы не поняли, как awkработает. Указанная «программа» всегда выполняется один раз для каждой строки (или «записи» на языке awk) ввода, нет необходимости FORили какой-либо подобной конструкции. Просто используйте:

многословный метод

ls -l | awk 'NR>=122 && NR<=129 { print }'

более компактный метод

ls -l | awk 'NR==122,NR==129'

Это дает диапазон для NR, который является «Запись номера», обычно это текущая строка awkобрабатывается.


6
На самом деле типичный awkкод для такой задачи обычно ls -l | awk 'NR==122,NR==129'.
Манатворк

какая команда для получения последних 100 строк из файла, используя awk
Shihabudheen KM

8

Еще один альтернативный метод будет использовать sed:

ls -l | sed -ne '122,129p'

Но если, как подсказывает ваш вопрос, для этого важно использовать awk, используйте комментарий Манатворка к ответу Зрайма. Как указано в документации awk:

   A  pattern  may  consist  of two patterns separated by a comma; in this
   case, the action is performed for all lines from an occurrence  of  the
   first pattern though an occurrence of the second.

Поэтому, если вы хотите, вы также можете сделать более сложные условия. Например:

ls -l | awk 'NR==122,/foobar/'

Это будет начинать вывод со строки 122 и продолжаться до тех пор, пока строка не будет содержать слово «foobar».

Если вы сообщите нам реальный вариант использования, мы сможем помочь с ответами, которые обеспечат лучшее решение. Я беспокоюсь, что это звучит как проблема XY .


2

Другой способ сделать это (хотя я предпочитаю awkметод) с помощью coreutils:

ls -l | tail -n +122 | head -n 8
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.