Если вы используете GNU AWK
, вы можете использовать его функции времени, чтобы проверить, работает ли он do
awk 'END{print strftime("%y%m%d")}' emptyfile.txt
, который должен выводить текущий день в формате YYMMDD
. Если это так, вы можете получить то, что хотите, следующим образом:
awk 'BEGIN{today=strftime("%y%m%d");threedago=strftime("%y%m%d",systime()-259200)}END{print today, threedago}' emptyfile.txt
выход (на сегодняшний день)
210809 210806
Объяснение: strftime
первый аргумент — формат времени %y
— год 00...99, %m
— месяц 01...12, %d
— день 01...31. Второй аргумент является необязательным, и это секунды с начала эпохи. Если используется пропущенное текущее время, systime()
возвращает количество секунд с начала эпохи, 259200
равно 72 часам в секундах.
Пример использования в качестве регулярного выражения, допустим, что у меня есть file.txt
следующим образом
210807 120
210808 150
210809 100
и хочу получить содержимое второго столбца на сегодня, тогда я могу сделать
awk 'BEGIN{today=strftime("%y%m%d")}$1~today{print $2}' file.txt
получение вывода (на сегодняшний день)
100
(проверено в gawk 4.2.1)
Добро пожаловать в SO, спасибо, что показали свои усилия. Не могли бы вы добавить образцы входных данных и ожидаемых результатов в свой вопрос, чтобы сделать его более понятным.
как я прокомментировал вам ваш предыдущий вопрос, подумайте: coderhelper.com/q/6697753/10971581
Какую команду даты вы используете? В OSX -d устанавливает часовой пояс, а -v используется для определения разницы во времени. Итак,
date '+%Y%m%d'
— это сейчас, аdate -v-72H '+%Y%m%d'
— на 3 дня (72 часа) раньше.Здравствуйте, добро пожаловать на SO. Показанные вами команды даже синтаксически неверны. Вы их пробовали?