Обработка файла Awk для получения последнего обработанного дня недели

Рассмотрите возможность использования «исходного кода», если вы хотите, чтобы сценарий изменил среду в текущей запущенной оболочке. Затем другие процессы и сценарии могут получить доступ к экспортированным переменным в оболочке.

source myscript

Это будет источник myscript. Файл не обязательно должен быть исполняемым, но он должен быть допустимым сценарием оболочки. Файл может находиться в текущем каталоге или в каталоге в $PATH.

. myscript

Это также будет источником myscript. Это «написание» является официальным, как определено POSIX. Bash определил источник как псевдоним точки.

Затем вы можете скопировать и изменить, например, существующий файл.bashrc/profile, чтобы переопределить PATH с выбранными параметрами. Это позволит экспортировать новые настройки в текущую запущенную оболочку. Когда вы закончите, загрузите исходный.bashrc/profile и т. д., чтобы вернуться в нормальное состояние.

Вы также можете исследовать использование команды «exec» для выполнения скрипта :Команда «exec» уничтожит или завершит текущую оболочку перед выполнением «myscript». Итак, вам нужно будет создать среду (PATH и т. д. с нуля):

#!/bin/bash
#myscript to check exec
exec /path/myRestrictedShellscript.sh
echo "This text will not be printed"
1
06.11.2020, 19:28
1 ответ

С помощью GNU awkи некоторой помощи от xmllintдля разбора xml.

#!/bin/bash

input_file="$1"
status_file="status_file.txt"

weekend="True"
weekend="$(xmllint --xpath "//WeekendProcessing/text()" "$1")"

awk -F, -v f="$input_file" -v weekend="$weekend" '
$1 == f && $NF > max {
    if (weekend == "True") {
        max = $NF
    } else {
        d = mktime(substr($NF,1,4)" "substr($NF,5,2)" "substr($NF,7)" 00 00 00")
        if (strftime("%u",d) < 6) max = $NF
    }
}
END {print max}
' "$status_file"

Тестирование:

> bash test.sh test1.xml
20201023
> bash test.sh test2.xml
20201024

Примечания:

  • Я использовал xmllintдля извлечения текстового значения узла WeekendProseccingс помощью одного выбора пути. Вы можете заменить его своим любимым способом получения значения из XML-файла.

  • Строки не сортируем, разбираем один раз файл, так тоже быстрее. Мы не вызываем внешние команды даты. Для weekend="True"мы сохраняем максимальную дату. Или же, для weekend="False", мы используем функции GNU awk datetime . Мы создаем дату с помощью mktime()и проверяем день недели с помощью strftime(), используя формат :%u, который возвращает число в диапазоне 1 -7 (1 для понедельника ). Таким образом, мы обновляем максимум только в том случае, если найденная более высокая дата не является субботой или воскресеньем.

2
18.03.2021, 22:51

Теги

Похожие вопросы