at
хранит свои задания в виде сценариев оболочки, которые настраивают переменные окружения задания (и рабочий каталог ). Вы можете увидеть их, запустив
at -c ${jobid}
замена ${jobid}
при необходимости (см.atq
). Вы найдете значение TEST_DIR
в выводе.
Если мы проигнорируем строку ...
и предположим, что все ваши даты расположены в порядке возрастания $2, как показано в вашем примере, тогда все, что вам нужно, это:
$ awk -F';' '(20210112 <= $2) && ($2 <= 20210219)' file
-;20210112;-;-;-;
-;20210112;-;-;-;
-;20210112;-;-;-;
-;20210217;-;-;-;
-;20210217;-;-;-;
-;20210217;-;-;-;
-;20210217;-;-;-;
-;20210219;-;-;-;
-;20210219;-;-;-;
или более эффективно, так как он выходит за пределы диапазона:
$ awk -F';' '20210112 <= $2{f=1} $2 > 20210219{exit} f' file
-;20210112;-;-;-;
-;20210112;-;-;-;
-;20210112;-;-;-;
...
-;20210217;-;-;-;
-;20210217;-;-;-;
-;20210217;-;-;-;
-;20210217;-;-;-;
-;20210219;-;-;-;
-;20210219;-;-;-;
Вышеупомянутое также предполагает, что если дата окончания отсутствует во входных данных, вы хотите печатать с даты начала до конца файла, а если дата начала отсутствует, вы хотите печатать с первой даты, превышающей от даты начала до даты окончания и т. д.
Предполагая, что у вас есть строковый порядок даты, т. е. между двумя 20210219
строками не может быть «беспорядочного» 20210220
, следующее будет работать:
awk -F';' -v start="20210112" -v stop="20210219" '$2==start{p=1} $2==stop{p=0} p||$2==stop' input.dat
Даты начала и окончания будут переданы в программу как awk
переменные start
и stop
. Как только мы находим дату начала, мы устанавливаем флагp
(для «печати» )на 1
. Если мы находим дату остановки, мы сбрасываем ее на 0
. Строки будут печататься до тех пор, пока либо p
равно 1
, либо текущая дата строки равна дате окончания. Таким образом, мы будем печатать до последнего вхождения 20210219
.
Обратите внимание, что это будет работать только в том случае, если в файле явно указаны даты начала и окончания. Если нет, вы можете использовать тот факт, что ваши даты в порядке ISO:
awk -F';' -v start="20210112" -v stop="20210219" '$2>=start&&$2<=stop' input.dat
Это будет печататься до тех пор, пока второе поле равно или больше даты начала и равно или меньше даты окончания. Это будет работать с датами, отформатированными так, как вы показали, но не в случае содержимого $2
, которое нельзя легко упорядочить с помощью операторов сравнения <
или >
.