Просто * запустите его по любому расписанию с помощью cron и проверьте другое часть расписания в скрипте:
Один способ:
@reboot /path/to/my_script.sh
if has_run_this_month() {
exit
}
Другой способ:
0 0 1 * * /path/to/my_script.sh
if has_run_since_reboot() {
exit
}
* Есть несколько проблем с этим способом запуска вещей:
Основная часть awk-скрипта имеет вид:
*pattern* *action*
Где любой из них может быть опущен. Отсутствие шаблона означает, что действие выполняется всегда. При пропуске действия действие по умолчанию печатает текущую строку.
Естественным способом выражения диапазона будет секция шаблона , например:
BEGIN {
somevar=5
}
/start/,/end/ { print }
END {
somevar=6
}
(там, где я оставил в разделах BEGIN и END, просто чтобы сохранить ту же структуру, с которой вы начали ).
Чтобы добиться такого же поведения в разделе действие , необходимо отслеживать, где вы находитесь:
BEGIN {
p=0
}
{
if (/start/) p=1
if (p) { print }
if (/end/) p=0
}
END {
p=0
}
Здесь нет шаблона , поэтому блок действия выполняется для каждой строки. Мы устанавливаем флаг(p
)в 1 или «true», когда видим строку, соответствующую /start
/; если (и только если )этот флаг истинен, мы печатаем строку. Если мы видим /end
/, то сбрасываем флаг. Блоки BEGIN и END здесь излишни; переменные в awk по умолчанию равны нулю/false.
oot@localhost ~]# i=`awk '/care/{print NR}' l.txt| sort -nr| sed -n '1p'`
[root@localhost ~]# awk -v i="$i" '/care/{x=NR+i}(NR<=x){print }' l.txt
don't care
don't care
start
record of interest
record on interest
...
end
don't care
don't care
...