Как сразу добавить заголовок и трейлер в существующий файл

Вопрос или проблема

Есть ли простой способ добавить заголовок и трейлер в существующий текстовый файл? Тот же каталог, тот же текстовый файл. Например, awk?
Буду признателен за объяснение, как обработать это с помощью awk. Спасибо.

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

Предположим, я хотел бы добавить заголовок к трейлеру в существующий файл ALERT.txt
Файл находится в каталоге, называемом $Source_Dir

Текстовый файл содержит название столбца, поэтому у меня есть две переменные Record_Count и Actual_Record_Count для подсчета записей:

Record_Count=`wc -l < ${Source_Dir}/${Output_File_Name} | tr -d " "`
Actual_Record_Count=`expr ${Record_Count} - 1`

Сначала я создаю текстовый файл, называемый ALERT, с заголовком в $Target_Dir

echo ${Bus_date} >${Target_Dir}/${Output_File_Name}

Затем я добавляю Alert.txt из $Source_Dir в новый файл, созданный в $Target_Dir

cat ${Source_Dir}/${Output_File_Name} >> ${Target_Dir}/${Output_File_Name}

Наконец, я продолжаю добавлять трейлер в файл Alert.txt в $Target_Dir.
Трейлер будет содержать количество записей

echo "EOF${Actual_Record_Count}" >>${Target_Dir}/${Output_File_Name}

Итак, у вас есть некоторая переменная оболочки, $Bus_date, которую вы хотите добавить в отдельной строке как заголовок. Затем следует содержимое $Source_Dir/$Output_File_Name, за которым следует строка EOFNN, где NN – это количество строк в этом файле минус один.

Используя awk:

awk -v head="$Bus_date" 'BEGIN { print head } { print } END { print "EOF" NR-1 }' "$Source_Dir/$Output_File_Name" >"$Target_Dir/$Output_File_Name"

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

BEGIN { print head }
      { print }
END   { print "EOF" NR-1 }

В командной строке мы устанавливаем для переменной awk head значение $Bus_date. Это значение выводится до того, как мы начнем чтение из данного файла, блоком BEGIN.

Блок { print } гарантирует, что данный файл передается без изменений.

Блок END использует встроенную переменную NR, которая содержит количество считанных записей (строк) до сих пор. В блоке END, NR будет равно количеству строк в файле, который был прочитан.

Ответ или решение

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

Контекст

У вас есть текстовый файл ALERT.txt в директории $Source_Dir. Вам нужно добавить заголовок, содержащий значение переменной $Bus_date, и трейлер, содержащий строку EOFNN, где NN — количество строк в файле минус одна. Новый файл должен быть создан в директории $Target_Dir с таким же именем файла.

Решение с использованием awk

Команда

awk -v head="$Bus_date" 'BEGIN { print head } { print } END { print "EOF" NR-1 }' "$Source_Dir/$Output_File_Name" > "$Target_Dir/$Output_File_Name"

Объяснение

  1. Установка переменной head: При помощи параметра -v head="$Bus_date" передаём значение переменной $Bus_date в awk. Это значение будет использоваться для ввода заголовка.

  2. Блок BEGIN: Этот блок исполняется один раз до начала обработки входящих данных. Здесь происходит вывод заголовка:

    BEGIN { print head }
  3. Обработка основной части файла: Команда { print } указывает awk выводить каждую строку из исходного файла без изменений.

  4. Блок END: Этот блок исполняется после чтения всех записей. Встроенная переменная NR содержит количество обработанных строк. В нашем случае, print "EOF" NR-1 выведет строку EOF, за которой следует количество строк минус одна, что соответствует требованию:

    END { print "EOF" NR-1 }

Преимущества решения

  • Эффективность: Утилизация awk позволяет справиться с задачей в один этап, избегая создания промежуточных файлов и лишних операций.
  • Простота и понятность: Интуитивно понятное использование awk позволяет легко адаптировать это решение для других задач, связанных с обработкой файлов.
  • Гибкость: Команду можно модифицировать для работы с разными источниками данных и для добавления различных заголовков и трейлеров, в зависимости от ваших нужд.

Заключение

Использование awk для добавления заголовка и трейлера к файлу — это мощный и гибкий подход, который позволяет автоматизировать рутинные задачи обработки данных. Это не только экономит время, но и уменьшает количество возможных ошибок, что всегда критично в профессиональной работе с данными.

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

Капча загружается...