У меня есть переменная, содержащая содержимое файла с несколькими строками. Переменная анализируется множеством команд (awk
, sed
,...), которые действуют как фильтры и постпроцессоры переменной.
echo "$variable" | awk1 | sed1 | awk2
Проблема не в самой обработке, а в том, что я модифицирую строку в процессе, теряя исходное значение переменной. Проблема в том, что конечный awk
выполняет условную проверку, которая возвращает, в зависимости от результата, исходную переменную или нет. И в этом заключается моя проблема.
Я предполагаю, что было бы неплохо создать эту переменную с исходной строкой после эха, но все мои попытки унаследовать ее в следующих подоболочках не увенчались успехом. Решение должно быть переносимым (соответствовать стандарту POSIX).
Формат переменной:
John Smith - - [21/Mar/2017:09:24:33 +0100] Physics
Adam Miller - - [22/Feb/2019:09:24:33 +0100] Chemistry
Я хочу сравнить даты в этом файле с заданной датой в формате YYYYMMDDHHMMSS
(например, 20180101151515), и если строка содержит дату после, я хочу напечатать всю строку.
Мой код до сих пор:
date_after="19960101151515"
process=$(echo "$variable" |awk -F' - - ' '{print $2}' | sed "s/Jan/01/; s/Feb/02/;
s/Mar/03/; s/Apr/04/; s/May/05/; s/Jun/06/; s/Jul/07/;
s/Aug/08/; s/Sep/09/; s/Oct/10/; s/Nov/11/; s/Dec/12/" | awk -F'[/:\\[ ]' -v date="$date_after" '{b=$4$3$2$5$6$7; if (b > date) {print $0}}')