Продвинутое использование команд для обработки текста (sed, awk)

sed и awk — это мощные инструменты для обработки и трансформации текстовых данных в Unix/Linux системах. Они позволяют эффективно работать с текстовыми файлами и потоками данных, выполняя сложные операции замены, фильтрации и анализа. В этом руководстве мы рассмотрим продвинутое использование этих команд с примерами.

Команда sed (Stream Editor)

sed — это потоковый редактор, который позволяет изменять текст в потоке или файле, используя регулярные выражения.

Основной синтаксис

sed [опции] 'команда' [файл]

Примеры использования

Замена текста

Основная операция в sed — это замена.

sed 's/старый_текст/новый_текст/g' файл.txt
  • s — команда замены.

  • g — флаг, указывающий на глобальную замену во всех вхождениях строки.

Пример: Замена всех вхождений слова "cat" на "dog" в файле animals.txt:

sed 's/cat/dog/g' animals.txt

Замена текста на конкретных строках

Вы можете ограничить замену определёнными строками.

sed '2s/cat/dog/' animals.txt

Это заменит только на второй строке файла.

Удаление строк

sed может удалять строки на основе определённых условий.

Удаление пустых строк:

sed '/^$/d' файл.txt

Удаление строк, содержащих определённое слово:

sed '/word/d' файл.txt

Инлайн редактирование файлов

Чтобы внести изменения непосредственно в файл, используйте опцию -i:

sed -i 's/cat/dog/g' animals.txt

Это изменит файл animals.txt на месте.

Замена с использованием регулярных выражений

sed 's/[0-9]\{3\}/###/g' файл.txt

Этот пример заменит любую последовательность из трёх цифр на "###".

Команда awk (Aho, Weinberger, and Kernighan)

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

Основной синтаксис

awk 'команда' [файл]

Примеры использования

Извлечение столбцов

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

Извлечение второго столбца:

awk '{print $2}' файл.txt

Извлечение нескольких столбцов:

awk '{print $1, $3}' файл.txt

Этот пример выводит первый и третий столбцы.

Фильтрация строк по условию

awk может фильтровать строки на основе определённых условий.

Фильтрация строк, где значение в третьем столбце больше 100:

awk '$3 > 100' файл.txt

Подсчёт количества строк

awk может подсчитывать количество строк в файле:

awk 'END {print NR}' файл.txt

Этот пример выведет количество строк в файле.

Подсчёт суммы значений в столбце

Суммирование значений во втором столбце:

awk '{sum += $2} END {print sum}' файл.txt

Условные операторы в awk

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

Пример: Если значение в третьем столбце больше 50, умножить его на 2:

awk '{if ($3 > 50) $3 = $3 * 2}1' файл.txt

Здесь 1 в конце означает "вывести строку", что является сокращением для более полного выражения print $0.

Объединение полей с разделителями

Вы можете изменить разделитель полей при выводе:

awk -F: '{print $1, $3}' /etc/passwd | awk 'BEGIN {OFS="|"} {print $1, $2}'

Здесь -F: указывает awk использовать : как разделитель полей, а OFS="|" устанавливает разделитель полей при выводе на |.

Комбинированное использование sed и awk

Часто бывает полезно комбинировать sed и awk для выполнения сложных операций обработки текста.

Пример: Удаление пустых строк с помощью sed и извлечение первого и третьего столбцов с помощью awk:

sed '/^$/d' файл.txt | awk '{print $1, $3}'

Пример: Замена текста и подсчёт строк:

sed 's/старый_текст/новый_текст/g' файл.txt | awk '{print NR, $0}'

Этот пример заменяет все вхождения "старый_текст" на "новый_текст" и выводит строки с их номерами.

Заключение

sed и awk — это мощные инструменты для обработки текста, которые можно использовать как по отдельности, так и в сочетании друг с другом для выполнения сложных операций обработки и анализа текстовых данных. Знание их возможностей позволяет эффективно автоматизировать задачи по обработке текстовых данных в Unix/Linux системах.

Last updated