К основному контенту

Использование awk в Linux

Текст это сердце Unix. Философия "все есть файл" полностью пронизывает всю систему и  разработанные для нее инструменты. Вот почему работа с текстом является одним из обязательных навыков системного администратора или начинающего пользователя Linux.

AWK - один из самых мощных инструментов для обработки и фильтрации текста, доступный даже для людей никак не связных с программированием. Использование awk в Linux

Простейшая и часто востребованная задача - выборка полей из стандартного вывода. Вы не найдете более подходящего инструмента для решения этой задачи, чем awk. По умолчанию awk разделяет поля пробелами. Если вы хотите напечатать первое поле, вам нужно просто указать awk параметр $1:

echo 'one two three four' | awk '{print $1}'

one

Да, использование фигурных скобок немного непривычно, но это только в первое время. Вы уже догадались как напечатать второе, третье, четвертое, или другие поля? Правильно это $2, $3, $4 соответственно.

echo 'one two three four' | awk '{print $3}'

three

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

echo 'one two three four' | awk '{print $3,$1}' three one

echo 'one two three four' | awk '{print "foo:",$3,"| bar:",$1}' foo: three | bar: one

Если поля разделены не пробелами, а другим разделителем, просто укажите в параметре -F нужный разделитель в ковычках, например ":" :

echo 'one mississippi:two mississippi:three mississippi:four mississippi' | awk -F":" '{print $4}' four mississippi

Но разделитель не обязательно заключать в ковычки. Следующий вывод аналогичен предыдущему:

echo 'one mississippi:two mississippi:three mississippi:four mississippi' | awk -F: '{print $4}' four mississippi

Иногда нужно обработать данные с неизвестным количеством полей. Если вам нужно выбрать последнее поле можно воспользоваться переменной $NF. Вот так вы можете вывести последнее поле:

echo 'one two three four' | awk '{print $NF}' four

Также вы можете использовать переменную $NF для получения предпоследнего поля:

echo 'one two three four' | awk '{print $(NF-1)}' three

Или поля с середины:

echo 'one two three four' | awk '{print $((NF/2)+1)}' three

echo 'one two three four five' | awk '{print $((NF/2)+1)}' three

Все это можно сделать с помощью таких утилит как sed, cut и grep но это будет намного сложнее.

И еще одна возможность awk, поддержка обработчиков для строк:

echo -e 'one 1\n two 2' | awk '{print $1}' one two

echo -e 'one 1\n two 2' | awk '{print $2}' 1 2

echo -e 'one 1\n two 2' | awk '{sum+=$2} END {print sum}' 3

Это означает что мы должны выполнять следующий блок кода для каждой строки. Это можно использовать, например, для подсчета количества переданных данных по запросам из журнала веб-сервера.

Представьте себе, у нас есть журнал доступа, который выглядит так:

23 июля 18:57:12 HTTPD [31950]: "GET/Foo/бар HTTP/1.1" 200 344 23 июля 18:57:13 HTTPD [31950]: "GET/HTTP/1.1" 200 9300 23 июля 19:01:27 HTTPD [31950]: "GET/HTTP/1.1" 200 9300 23 июля 19:01:55 HTTPD [31950]: "GET/Foo/Baz HTTP/1.1" 200 6401 23 июля 19:02:31 HTTPD [31950]: "? GET/Foo/Baz страница = 2 HTTP/1.1" 200 6312

Нам известно что последнее поле это число переданных байт, тогда мы можем использовать переменную $NF:

< requests.log awk '{print $NF}' 344 9300 9300 6401 6312

Вот так можно подсчитать количество байт:

< requests.log awk '{totalBytes+=$NF} END {print totalBytes}' 31657

Это только несколько примеров показывающих использование awk в Linux , освоив awk один раз в получите очень мощный и полезный инструмент на всю жизнь.

Комментарии


Дистанционная компьтерная помощь, удаленная компьютерная помощь онлайн.

Популярные сообщения из этого блога

Лучшие плагины для OBS Studio

Open Broadcast Software или OBS - это свободное программное обеспечение с открытым исходным кодом для стриминга аудио и видео данных в сеть интернет. Программа полностью кроссплатформенная и может работать в Windows, Linux или MacOS. Это отличная альтернатива для таких программ, как Wirecast и XSplit. OBS использует для вещания стандартный протокол обмена сообщениями в реальном времени, а поэтому может транслировать данные в любой сервис, поддерживающий это, например, Yotube. Несмотря на широкие возможности OBS, программа поддерживает еще и множество плагинов. В этой статье мы рассмотрим лучшие плагины для OBS Studio, которые вы можете использовать. Содержание статьи: Лучшие плагины OBS Studio 1. Browser Source Plugin 2. Video Source Plugin 3. Simple Scene Switcher 4. DirectShow Audio Source 5. CLR Browser Source 6. OBS Remote 7. AMD Advanced Media Framework Encoder 8. Text Source Plugin Выводы Лучшие плагины OBS Studio Чтобы найти плагины OBS Studio для Video пользователям пр…

Лучшие аналоги Paint для Linux

Когда я работал в Windows, я часто использовал стандартную программу редактора изображений Windows - Paint. Не всегда нужен очень и многофункциональный инструмент вроде Photoshop или Gimp. Иногда, чтобы подправить ту или иную картинку, дорисовать на ней несколько фигур или вставить текст достаточно простого, легкого в освоении графического редактора вроде Paint. В Linux таких программ довольно много. В этой инструкции мы рассмотрим лучшие аналоги Paint для Linux. В этот список не будут включены такие программы, как Gimp и Krita, ведь это полнофункциональные графические редакторы, векторные редакторы, такие как Inkscape мы тоже рассматривать не будем. А теперь перейдем к списку. Содержание статьи: KolourPaint MyPaint Gnome Paint XPaint Pinta mtPaint GPaint Rassam-paint Выводы KolourPaint На первом месте в списке аналогов Piant для Linux будет KoloutPaint. Это стандартный графический редактор для окружения рабочего стола KDE. Он поддерживает множество форматов изображений PNG, J…

Подключение OneDrive в Linux

OneDrive (Ранее известный как SkyDrive) это популярное облачное хранилище файлов от Майкрософт. Сейчас OneDrive бесплатно предоставляет 7 гигабайт пространства новым пользователям. Как вы знаете OneDrive хорошо интегрирован с другими продуктами компании  Microsoft. В OneDrive Также есть официальный клиент который автоматически загружает ваши видео и фотографии с камеры в облако. Но к сожалению этот клиент недоступен для операционных систем семейства Linux. Но не все так плохо. Сообщество открытого программного обеспечения уже нашло решение. Это opedrive-d от Boilermaker. Запустившись как демон программа автоматически синхронизирует локальную папку с облаком OneDrive. Содержание статьи: Установка Onedrive-d в Linux Настройка Синхронизация локальной папки с OneDrive Установка Onedrive-d в Linux Несмотря на то что onedrive-d разрабатывается для Ubuntu/Debian, CentOs/Fedora/RHEL поддерживается тоже хорошо. Для установки достаточно набрать несколько команд: $ git clone https://gith…