- Сканируйте файлы построчно.
- Разделите каждую строку на поля / столбцы.
- Укажите шаблоны и сравните строки файла с этими шаблонами
- Выполняйте различные действия над линиями, соответствующими заданному шаблону
В этой статье мы объясним базовое использование команды awk и то, как ее можно использовать для разделения файла строк. Мы выполнили примеры из этой статьи в системе Debian 10 Buster, но их можно легко воспроизвести на большинстве дистрибутивов Linux.
Образец файла, который мы будем использовать
Пример файла строк, который мы будем использовать для демонстрации использования команды awk, выглядит следующим образом:
Вот что указывает каждый столбец файла примера:
- Первый столбец содержит имена сотрудников / учителей в школе
- Во втором столбце указана тема, которую преподает сотрудник
- В третьем столбце указано, является ли сотрудник профессором или доцентом
- Четвертый столбец содержит заработную плату сотрудника
Пример 1. Используйте Awk для печати всех строк файла
Печать каждой строки указанного файла является поведением команды awk по умолчанию. В следующем синтаксисе команды awk мы не указываем какой-либо шаблон, который awk должен печатать, поэтому предполагается, что команда применяет действие «print» ко всем строкам файла.
Синтаксис:
$ awk 'print' имя файла.текстПример:
В этом примере я приказываю команде awk напечатать содержимое моего файла примера построчно.
$ awk 'print' образец_файла.текст
Пример 2: используйте awk для печати только тех строк, которые соответствуют заданному шаблону
С помощью awk вы можете указать шаблон, и команда будет печатать только строки, соответствующие этому шаблону.
Синтаксис:
$ awk '/ pattern_to_be_matched / print' имя файла.текстПример:
Если из образца файла я хочу напечатать только те строки, которые содержат переменную 'B', я могу использовать следующую команду:
$ awk '/ B / print' sample_file.текст
Чтобы пример был более осмысленным, позвольте мне распечатать только информацию о сотрудниках, которые являются профессорами.
$ awk '/ Professor / print' sample_file.текст
Команда печатает только строки / записи, содержащие строку «профессор», поэтому мы получаем более ценную информацию, полученную из данных.
Пример 3. Используйте awk для разделения файла так, чтобы печатались только определенные поля / столбцы
Вместо того, чтобы печатать весь файл, вы можете заставить awk печатать только определенные столбцы файла. Awk по умолчанию обрабатывает все слова, разделенные пробелом, в строке как запись столбца. Он хранит запись в переменной $ N. Где $ 1 представляет первое слово, $ 2 хранит второе слово, $ 3 - четвертое и т. Д. $ 0 сохраняет всю строку, поэтому печатается строка who, как описано в примере 1.
Синтаксис:
$ awk 'напечатать $ N,… .' имя файла.текстПример:
Следующая команда напечатает только первый столбец (имя) и второй столбец (тему) моего файла образца:
$ awk 'print $ 1, $ 2' sample_file.текст
Пример 4: Используйте Awk для подсчета и печати количества строк, в которых совпадает шаблон
Вы можете указать awk подсчитать количество строк, в которых совпадает указанный шаблон, а затем вывести это 'count'.
Синтаксис:
$ awk '/ pattern_to_be_matched / ++ cnt END print "Count =", cnt'имя файла.текст
Пример:
В этом примере я хочу подсчитать количество людей, преподающих предмет «английский». Поэтому я скажу команде awk, чтобы она соответствовала шаблону «english» и напечатала количество строк, в которых соответствует этот шаблон.
$ awk '/ english / ++ cnt END print "Count =", cnt' sample_file.текст
Подсчет здесь предполагает, что 2 человека изучают английский язык по образцу файловых записей.
Пример 5: используйте awk для печати только строк с более чем определенным количеством символов
Для этой задачи мы будем использовать встроенную функцию awk под названием «length». Эта функция возвращает длину входной строки. Таким образом, если мы хотим, чтобы awk печатал только строки с количеством символов больше или даже меньше, мы можем использовать функцию длины следующим образом:
Для печати строк с символами больше числа:
$ awk 'длина ($ 0)> n' имя файла.текстДля печати строк с символами меньше числа:
длина $ awk ($ 0) < n' filename.txtГде n - количество символов, которые вы хотите указать для строки.
Пример:
Следующая команда распечатает только те строки из моего образца файла, которые содержат символы более 30:
$ awk 'длина ($ 0)> 30' файл_выборки.текст
Пример 6: Использование awk для сохранения вывода команды в другой файл
Используя оператор перенаправления '>', вы можете использовать команду awk для вывода ее вывода в другой файл. Вот как вы можете его использовать:
$ awk 'criterion_to_print "имя файла.txt> выходной файл.текстПример:
В этом примере я буду использовать оператор перенаправления с моей командой awk для печати только имен сотрудников (столбец 1) в новый файл:
$ awk 'print $ 1' sample_file.txt> employee_names.текст
Я проверил с помощью команд cat, что новый файл содержит только имена сотрудников.
Пример 7: Использование awk для печати только непустых строк из файла
В Awk есть несколько встроенных команд, которые можно использовать для фильтрации вывода. Например, команда NF используется для подсчета полей в текущей входной записи. Здесь мы будем использовать команду NF для печати только непустых строк файла:
$ awk 'NF> 0' файл_выборки.текстОчевидно, вы можете использовать следующую команду для печати пустых строк:
$ awk 'NF < 0' sample_file.txtПример 8: использование awk для подсчета общего количества строк в файле
Другая встроенная функция, называемая NR, ведет подсчет количества входных записей (обычно строк) данного файла. Эту функцию в awk можно использовать для подсчета количества строк в файле следующим образом:
$ awk 'END print NR' sample_file.текст
Это была основная информация, необходимая для начала разделения файлов с помощью команды awk. Вы можете использовать комбинацию этих примеров, чтобы получить более значимую информацию из вашего файла строк с помощью awk.