Для поддержки нескольких получателей с этим конкретным скриптом используйте $1
в качестве элемента пути, а затем уберите его из списка позиционных параметров. Теперь список $@
содержит только получателей.
#!/bin/bash
dir=$1
shift
shopt -s nullglob
for file in "/usr/app/tst/$dir/MS_CASE_ST"*.csv; do
uuencode "$file" "$( basename "$file" )" # or uuencode "$file" "${file##*/}"
done | mailx -s 'MS_CASE_ST*.csv file(s) contains data. Please Research' "$@"
Несколько замечаний:
Будьте осторожны и используйте двойные кавычки для любых расширений переменных, иначе у вас возникнут проблемы, когда имя пути содержит пробелы или подстановочные символы имени файла и т. д. (и статические строки с одинарными кавычками ).
Заключение $@
как "$@"
гарантирует, что оно расширяется до отдельных элементов в кавычках.
Установив параметр оболочки nullglob
в bash
, мы гарантируем, что шаблон подстановки, который использует цикл, расширяется до ничего , если он не соответствует ни одному существующему имени пути.
BEGIN { FS = "," }
{
split($1, a, ".")
timestamp = mktime(sprintf("%.4d %.2d %.2d 00 00 00", a[3], a[2], a[1]))
day = strftime("%u", timestamp)
}
day >= 6
Этот скрипт GNUawk
(илиmawk
)будет считывать дату в формате, который вы указали в вопросе, из первого поля, разделенного запятой -. Он разделит это поле и вызовет mktime()
для построения значения временной метки Unix, соответствующего полуночи каждой даты чтения.
Затем используется strftime()
со строкой формата %u
, что заставляет функцию возвращать день недели в виде десятичного целого числа между 1 (понедельник )и 7 (воскресенье ).
В последней строке проверяется значение для выходных, и если эта проверка проходит успешно, печатается текущая строка. Если вы просто хотите напечатать номер строки, измените его на day >= 6 { print FNR }
.
Вы бы запустили это как
$ awk -f script.awk myfile.csv
Обратите внимание, что для этого скрипта требуется либо GNU awk
, либо mawk
, либо функции mktime()
и strftime()
могут быть недоступны.