Вопрос или проблема
Есть ли простой способ добавить заголовок и трейлер в существующий текстовый файл? Тот же каталог, тот же текстовый файл. Например, 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"
Объяснение
-
Установка переменной
head
: При помощи параметра-v head="$Bus_date"
передаём значение переменной$Bus_date
вawk
. Это значение будет использоваться для ввода заголовка. -
Блок
BEGIN
: Этот блок исполняется один раз до начала обработки входящих данных. Здесь происходит вывод заголовка:BEGIN { print head }
-
Обработка основной части файла: Команда
{ print }
указываетawk
выводить каждую строку из исходного файла без изменений. -
Блок
END
: Этот блок исполняется после чтения всех записей. Встроенная переменнаяNR
содержит количество обработанных строк. В нашем случае,print "EOF" NR-1
выведет строкуEOF
, за которой следует количество строк минус одна, что соответствует требованию:END { print "EOF" NR-1 }
Преимущества решения
- Эффективность: Утилизация
awk
позволяет справиться с задачей в один этап, избегая создания промежуточных файлов и лишних операций. - Простота и понятность: Интуитивно понятное использование
awk
позволяет легко адаптировать это решение для других задач, связанных с обработкой файлов. - Гибкость: Команду можно модифицировать для работы с разными источниками данных и для добавления различных заголовков и трейлеров, в зависимости от ваших нужд.
Заключение
Использование awk
для добавления заголовка и трейлера к файлу — это мощный и гибкий подход, который позволяет автоматизировать рутинные задачи обработки данных. Это не только экономит время, но и уменьшает количество возможных ошибок, что всегда критично в профессиональной работе с данными.