Linux awk количество строк

Содержание
  1. Linux awk количество строк
  2. AWK: Примеры программ
  3. Способы запуска awk-программ
  4. Фильтрация строк с помощью awk
  5. Отбор строк, соответствующих регулярному выражению
  6. Отбор строк, НЕ соответствующих регулярному выражению
  7. Отбор строк из заданного диапазона
  8. Комбинирование условий фильтрации
  9. Отбор строк по условиям относительно отдельных слов
  10. Отбор строк на основе числовых характеристик
  11. Работа со строками в awk
  12. Форматированный вывод
  13. Функции преобразования
  14. Условные конструкции
  15. Переменные
  16. Циклы
  17. Нестандартный разделитель слов
  18. Комбинирование фильтров и команд печати
  19. 📜 Как посчитать строки в файле в UNIX / Linux
  20. Использование команды «wc -l»
  21. Использование команды awk
  22. Использование команды sed
  23. Использование команды grep
  24. Еще несколько команд
  25. Добавить комментарий Отменить ответ
  26. • Свежие записи
  27. • Категории
  28. • itsecforu.ru
  29. • Страны посетителей
  30. IT is good

Linux awk количество строк

AWK — утилита предназначенная для простых, механических и вычислительных манипуляций над данными. Довольно несложные операции часто необходимо выполнить над целыми пакетами файлов, а писать для этого программу на одном из стандартных языков программирования является утомительным и, как правило, не очень простым делом. Оптимальное решение проблемы — использование специальной утилиты AWK , включающей в себя не громоздкий и удобный язык программирования, позволяющий решать задачи обработки данных с помощью коротких программ, состоящих из двух-трех строк.

Утилита AWK изначально объединяла свойства утилит UNIX — sed и grep . В дальнейшем ее возможности значительно расширились. Настоящая документация ограничивается описанием возможностей утилиты AWK реализованной для компьютеров CONVEX . Утилита AWK была создана в 1977г, американскими авторами: Alfred V.Aho , Brian W.Kernighan и Peter J.Weinberger . Подробное описание всех возможностей утилиты AWK для UNIX дает их издание: «The AWK Programming Language», 1988.

AWK сканирует input (стандартный или указываемый набор файлов), и над строками, удовлетворяющими заданному образцу, выполняет указываемые действия. Строка может содержать максимально до 256 символов.

awk [-Fc] [-f file] [files]

awk [-Fc] [prog] [files]

prog — программа, вида: ‘ образец $<$действие$>$ ‘

file — файл с AWK-программой:

files — файлы, предназначенные для AWK-обработки.

-Fc — устанавливает разделитель полей в «с» (См. 1.2.1 и 2.4)

2. Образец:

  • Регулярное выражение;
  • Выражение отношения;
  • Комбинация образцов;
  • BEGIN и END .

3. Действие:

  • Последовательность предложений, разделенных « ; » или « \n » (новая строка)

Предложение:

  1. Вывод (Печать);
  2. Присваивание;
  3. Встроенная функция;
  4. Управляющая структура.

На поля можно ссылаться из AWK программы следующим образом:

  1. $1 — Первое поле;
  2. $2 — Второе поле;
  3. . и так далее.
  4. $0 — Ссылается на всю строку целиком.

Строка может содержать максимально до 100 полей.

&lt Drawing or tabular insertion skipped. &gt

x = 1 , x воспринимается как число;

x = » » , x — строка;

x + «abc» — результат операции интерпретируется как число независимо от того, было ли х числом или строкой. Если строка не может быть интерпретирована как число ( «abc» ), то ее значение становится 0.

Строка может содержать максимально до 256 символов.

$1 = «3» + $2 — первое поле принимает значение второго поля, увеличенного на 3.

$(i+1) — интерпретируется как поле, номер которого зависит от значения переменной i .

x[NR] = $0 — элементу массива x , индексированному NR , присваивается обрабатываемая строка.

x[«apple»] — элементы массива могут индексироваться не числовым значением, т.е. строкой.

  • «( )» — Скобки допускаются для группирования;
  • » |» — Указание альтернативы «или»;
  • » + » — Плюс, стоящий за регулярным выражением означает любую последовательность вхождений этого выражения, начиная с 1;
  • » ? » — Знак вопроса за регулярным выражением означает 0 или 1 вхождений этого выражения;
  • [A-Z] — Допускается сокращенная форма записи для рангов ASCII символов;
  • Установленный порядок выполнения операторов на одном скобочном уровне: «[] * + ? конкатенация |» .

/Olga/ — Указывает на строки, содержащие Olga .

/[Oo]lga|[Mm]ike|[Mm]al/ — Указывает на строки, содержащие Olga или olga или Mike или mike или Mal или mal .

/number4/ — Указывает на строки, содержащие number0 или number1 или . number9 .

/\/.+\// — Указывает на строки, содержащие любое количество символов, больше или равное 1, заключенных в / / .

Лог. Операция: &lt , &lt = , == , != , &gt = , &gt .

/[Oo]lga/ — Указывает на строки, первое поле которых содержит Olga или olga .

$1 &gt = «s» — Указывает на строки, начинающиеся с символа s или следующих за ним по порядку: t , u , v .

Последовательности образцов, соединенных одним из знаков читаются слева направо.

Комбинация: «образец1, образец2» указывает, что действие выполняется над строками, попадающими в указанный ранг: то есть, начиная от строки, удовлетворяющей «образец1″ и вплоть до строки, удовлетворяющей «образец2″, включая ее саму.

/\.su/) — Указывает на строки, содержащие 02.95 и не имеющие .su одновременно в первом и во втором поле.

NR == 100, NR == 200 — Указывает строки с номерами от 100 до 200.

Образец BEGIN указывает на начало input или на те действия, которые должны быть выполнены до какого бы то ни было анализа строк. Образец END указывает на конец input или на те действия, которые должны быть выполнены после обработки всех строк.

BEGIN — Устанавливает разделитель полей в «:» до начала обработки строк. Эквивалентно опции «-F:» при AWK вызове.

END < print NR >— Печатает номер последней строки input , т.е. количество обработанных входных строк.

PRINT [&lt список выражений &gt ] [ &gt &lt выражение1 &gt ]

Если в списке выражения находятся через запятую, то значения этих выражений выводятся на output (печатаются) через символ-разделитель OFS (по умолчанию пробел). Если же выражения стоят через пробел, то на печати происходит их конкатенация.

Значение &lt выражения1 &gt рассматривается как имя файла. Само его присутствие означает печать в файл. Если вместо « &gt » стоит « &gt &gt », то это означает добавление к уже существующему файлу. Можно использовать в одной программе максимально до 10 output файлов.

Оператор форматированной печати:

PRINTF формат [ ,список выражений ] [ &gt выражение1 ]

формат: символьная строка в двойных кавычках. Идентичен формату, используемому в функции printf в языке «С». Формат может содержать:

  • обычные символы, они копируются на output .
  • esc последовательности, представляющие неграфические символы, например, «\n» — новая строка.
  • спецификации для вывода аргументов, они следуют после символа « % ». Число спецификаций должно быть равно числу аргументов. (Если оно меньше числа аргументов, то лишние аргументы игнорируются, если же больше — то это ошибка)

&lt переменная &gt = &lt выражение &gt

Начальное значение переменной 0 или « » (пробел). Допускаются другие типы присваивания в соответствии с языком «С»: «+=» , «-=» , «*=» , «/=» , «%=» .

&lt переменная &gt ++ , ++&lt переменная &gt — увеличение значения переменной на 1.

&lt переменная &gt — , —&lt переменная &gt — уменьшение значения переменной на 1.

length(arg) — Функция длины arg . Если arg не указан, то выдает длину текущей строки.

exp(),log(),sqrt() — Математические функции экспонента, логарифм и квадратный корень.

int() — Функция целой части числа.

substr(s,m,n) — Возвращает подстроку строки s , начиная с позиции m , всего n символов.

index(s,t) — Возвращает начальную позицию подстроки t в строке s . (Или 0, если t в s не содержится.)

sprintf(fmt,exp1,exp2. ) — Осуществляет форматированную печать (вывод) в строку, идентично PRINTF .

split(s,array,sep) — Помещает поля строки s в массив array и возвращает число заполненных элементов массива. Если указан sep , то при анализе строки он понимается как разделитель.

if ( &lt условие &gt ) &lt предложение &gt

\hskip 1cm [else &lt предложение &gt ]

while ( &lt условие &gt ) &lt предложение &gt

\hskip 1cm &lt предложение &gt

for(i=1; i&lt =NF; i++) — Аналогично циклу for в языке «С»

for (i in array) — Цикл по элементам массива. Но, элементы массива доступны в этом случае в случайном порядке.

break — Немедленный выход из цикла.

continue — Переход к выполнению следующего предложения.

next — Немедленный переход к анализу следующей строки.

exit — Выход из программы (на конец input).

Источник

AWK: Примеры программ

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

Способы запуска awk-программ

Если awk -программа достаточно простая и короткая, то ее код можно набрать прямо в консоли:

В качестве входных данных для awk можно использовать не только текстовые файлы, но и вывод в стандартный поток других приложений:

В случае, когда код awk -программы достаточно объемный или должен быть сохранен для повторного использования, его можно вызывать из файла с ключом -f :

Для проведения экспериментов используем файл test.cpp , на котором будем проверять результаты работы awk — программ:

Реклама

Фильтрация строк с помощью awk

В первую очередь awk позволяет отбирать строки из текста на основе регулярных выражений и некоторых числовых условий.

Отбор строк, соответствующих регулярному выражению

Например, чтобы получить все строки файла test.cpp , содержащие директиву препроцессора #include , воспользуемся следующей командой:

Регулярное выражение записывается между двумя символами / . В результате получим:

Отбор строк, НЕ соответствующих регулярному выражению

Чтобы оставить все строки, которые не соответствуют регулярному выражению, воспользуйтесь командой из предыдущего подраздела и поставьте в начало awk -кода восклицательный знак. Например, так мы исключим все закомментированные строки:

Вот что осталось:

Отбор строк из заданного диапазона

Определить диапазон строк для вывода на экран можно с помощью двух регулярных выражений, записанных через запятую. В качестве примера найдем определение всех функций, возвращающих int :

Комбинирование условий фильтрации

Для проверки строк сразу по нескольким условиям используйте операторы && (И) и || (ИЛИ) .

Следующая команда выводит все комментарии, которые не содержат main :

Ранее мы искали диапазон строк по двум регулярным выражениям, но если номера строк, которые нужно вывести, известные заранее, то все упрощается:

NR — переменная awk , которая определяет номер строки. Таким образом, представленный код выводит 5-ую и 6-ую строки:

Отбор строк по условиям относительно отдельных слов

Awk может фильтровать текст не только по строкам, но и по отдельным словам. На i -ое слово в строке можно сослаться с помощью $i . Нумерация начинается с единицы, а $0 определяет содержимое всей строки. Количество слов в строке определяется с помощью переменной NF , поэтому $NF указывает на последнее слово. Например, найдем строки, первым словом которых является int или void :

Соответствующий вывод на консоль:

Однако проще использовать проверку по регулярному выражению для слова. Для этого в awk предусмотрен специальный оператор

, который нужно поставить между переменной, указывающей на слово, и регулярным выражением. В качестве примера перепишем предыдущую команду в более компактном виде:

Отбор строк на основе числовых характеристик

В awk доступны арифметические операторы языка C, что открывает свободу действий. Пример ниже выводит все четные строки ( NR — номер строки):

Следующая awk -программа выводит все строки, у которых длина 1-ого слова равна трем:

В результате получаем:

Далее приводится код для вывода строк, состоящих из двух слов ( NF — количество слов в строке):

И соответствующий вывод:

Реклама

Работа со строками в awk

Как вы могли убедиться, awk обладает неплохим набором функций для фильтрации строк текста. Однако для этих строк еще можно выполнять различные преобразования. Команды для работы со строками должны быть обернуты в фигурные скобки < . >. Код в скобках последовательно вызывается для каждой строки обрабатываемого текста.

Форматированный вывод

В awk имеется прямой аналог функции printf() языка C . В качестве примера выведем в начале каждой строки ее номер:

Вот что получили:

Функции преобразования

Кроме printf() есть в awk и другие функции. Например, print() и toupper() :

Условные конструкции

В awk -программах доступны операторы if-else . Например, следующий код выводит без изменения строки, у которых на 1-ой позиции стоит int , а на последней — < , иначе на консоль отправляется --- :

Выполнение кода приводит к выводу следующего:

Переменные

Доступны в awk -программах и переменные, которые не требуется предварительно объявлять. Следующий код для подсчета количества строк и слов в тексте поместим в файл stat.awk :

Тогда его вызов осуществляется следующим образом:

Фильтр END указывает, что код в скобках после него должен выполняться только после прохода всех строк. Доступен в awk и фильтр BEGIN , поэтому в более общем случае программа принимает вид:

Обратите внимание, что посчитать строки и слова в тексте намного проще с помощью wc :

Циклы

В awk -программах вам также доступны циклы for и while в стиле C . Для примера выведем все строки в обратном порядке. Создадим файл reverse.awk следующего содержимого:

Вызовем программу следующий образом:

В результате слова в каждой строке будут выведены в обратном порядке:

Нестандартный разделитель слов

По умолчанию awk в качестве разделителя слов использует пробельные символы, однако такое поведение можно изменить. Для этого воспользуйтесь ключом -F , после которого укажите строку, определяющую разделитель. Например, следующая программа выводит название группы и ее пользователей (если в группе есть пользователи) из файла /etc/group , применяя в качестве разделителя символ двоеточия:

Комбинирование фильтров и команд печати

Все рассмотренные ранее фильтры можно использовать совместно с командами обработки строк. Достаточно записать ограничения перед фигурными скобками. Ниже представлен пример для вывода первых 9 строк вывода команды ps , содержащей информацию о пользователе, идентификаторе процесса и имени команды:

Источник

📜 Как посчитать строки в файле в UNIX / Linux

Использование команды «wc -l»

Есть несколько способов подсчета строк в файле.

Но один из самых простых и широко используемых способов – использовать «wc -l».

Утилита wc отображает количество строк, слов и байтов, содержащихся в каждом входном файле, или в стандартном вводе (если файл не указан).

Итак, рассмотрим файл, показанный ниже:

Использование команды awk

Если вы хотите использовать awk для определения количества строк, используйте следующую команду awk:

Использование команды sed

Использование команды grep

Наш старый добрый друг “grep” также может быть использован для подсчета количества строк в файле.

Эти примеры показаны только для того, чтобы вы знали, что существует несколько способов подсчета строк без использования “wc -l”.

Но если меня спросят, я всегда буду использовать «wc -l» вместо этих опций, так как это слишком легко запомнить.

В GNU grep вы можете использовать следующий синтаксис grep:

Вот еще одна версия команды grep для поиска количества строк.

Еще несколько команд

Наряду с приведенными выше командами полезно знать некоторые редко используемые команды для поиска количества строк в файле.

1. Используйте команду nl (фильтр нумерации строк), чтобы получить нумерацию каждой строки.

Это не очень точный способ узнать количество строк.

Но вы можете использовать awk или sed для подсчета последней строки.

4. Вы также можете использовать perl, чтобы найти количество строк:

Добавить комментарий Отменить ответ

• Свежие записи

• Категории

• itsecforu.ru

• Страны посетителей

IT is good

Источник

Читайте также:  Windows key что значит
Оцените статью