Как найти все строки в файлах csv из заданного каталога, которые содержат дату, которая является субботой или воскресеньем?

Для поддержки нескольких получателей с этим конкретным скриптом используйте $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, мы гарантируем, что шаблон подстановки, который использует цикл, расширяется до ничего , если он не соответствует ни одному существующему имени пути.

-1
18.12.2019, 23:09
1 ответ
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()могут быть недоступны.

3
28.01.2020, 05:07

Теги

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