Чтение данных столбцов из текстового файла в Bash

Одной из задач в повседневной работе является построчное чтение данных из файла, разбор данных и их обработка. Входной файл может быть либо обычным текстовым файлом, где каждая строка содержит несколько полей, разделенных пробелами, либо CSV-файлом, отформатированным с разделенными разделителями значениями в каждой строке. Bash позволяет считывать столбцы из файла и сохранять их в отдельные переменные для дальнейшей обработки.

Чтение столбцов, разделенных пробелами, в Bash

Пример текстового файла (os.txt)

Для чтения данных столбцов из файла в bash можно использовать встроенную команду read, которая читает одну строку из стандартного ввода или дескриптора файла. В сочетании с циклом for/while команда read может читать содержимое файла построчно, пока не будет достигнут конец файла. Если каждая строка содержит несколько полей, read может считывать отдельные поля и сохранять их в заданных переменных. По умолчанию read распознает пробелы как разделитель для разных полей.

Чтение столбцов из файла CSV в Bash

При работе с CSV-файлом, в котором в качестве разделителя столбцов используется символ, не являющийся пробелом (например, "," или ";" или "|"), необходимо указать  разделитель в переменной IFS. Переменная IFS (сокращение от "Input Field Separator") - это специальная переменная bash, которая указывает символ или символы, разделяющие поля.

Цикл while может прочитать CSV-файл и сохранить столбцы в указанные переменные.  IFs= перед командой read указывает read использовать "," в качестве разделителя слов. Для проверки, пуст ли конкретный столбец или нет, используется оператор -z.

Чтение данных столбцов с помощью регулярного выражения

Более общий и сложный сценарий - это чтение данные столбцов из менее структурированных файлов, таких как журналы. Типичный файл журнала не так структурирован, как CSV-файлы, и может не использовать фиксированный символ-разделитель, а также фиксированное количество столбцов. В качестве примера рассмотрим следующий фрагмент файла auth.log.

Для примера можно извлечь логин пользователя и команду sudo, запущенную пользователем.

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

Понравилась статья? Поделиться с друзьями:
Добавить комментарий