Встроенные диапазоны в файле awk

Просто * запустите его по любому расписанию с помощью 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
}

* Есть несколько проблем с этим способом запуска вещей:

  • Вы когда-нибудь держите машину работающей более чем на месяц? Два месяца? Что произойдет в любом случае?
  • Вы когда-нибудь оставляли машину выключенной более чем на месяц? Вы можете видеть, к чему это идет…
  • Как убедиться, что путь, по которому вы сохраняете состояние (потому что у вас есть для его постоянного хранения), не стирается при загрузке, потому что это RAM-диск?
0
28.11.2018, 20:21
2 ответа

Основная часть 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.

2
28.01.2020, 02:41
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
...
-1
28.01.2020, 02:41

Теги

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