Догадываясь о том, что имеет в виду ОП:
- , если строка содержит строку 'To:' и
- , строка также имеет номер в поле № 15, который является> = 2019 затем
- вывести предыдущую строку и текущую строку
И некоторые предположения:
- первая строка в файле может соответствовать
- последовательных строк могут соответствовать поиску «To: /> = 2019»:
- для всех интересующих строк «To» ставится перед полем # 15
Выборочные данные основаны исключительно нав одной строке, предоставленной OP:
$ cat -n print15.dat
1 certificate1 - From: Friday, October 16, 2009 1:22:18 PM CEST To: Wednesday, October 16, 2019 1:32:16 PM CEST
2 this is line two
3 this is line three
4 certificate4 - From: Friday, October 16, 2009 1:22:18 PM CEST To: Wednesday, October 16, 2019 1:32:16 PM CEST
5 this is line five
6 this is line six
7 certificate7 - From: Friday, October 16, 2020 1:22:18 PM CEST To: Wednesday, October 16, 2017 1:32:16 PM CEST
8 this is line eight
9 this is line nine
10 certificate10 - From: Friday, October 16, 2009 1:22:18 PM CEST To: Wednesday, October 16, 2020 1:32:16 PM CEST
11 this is line eleven
12 certificate12 - From: Friday, October 16, 2009 1:22:18 PM CEST To: Wednesday, October 16, 2023 1:32:16 PM CEST
13 certificate13 - From: Friday, October 16, 2009 1:22:18 PM CEST To: Wednesday, October 16, 2024 1:32:16 PM CEST
14 this is line fourteen
Применяя описанную логику, мы видим, что строки 1, 4, 10, 12 и 13 соответствуют 'To: ./> = 2019'.
One awk
решение:
$ awk '/To:/ && $15 >= 2019 { printf "\n#############\n"
if (length(prevline) > 0) { print prevline }
print $0
printf "#############\n"
}
{ prevline=$0 }
' print15.dat
Объяснение:
/To:/ && $15 >= 2019
: сопоставляет любую строку с шаблонами 'To:' и полем # 15> = 2019 (предоставленоэто не означает, что 'To:' стоит перед полем # 15) print/########
: простой заголовок / трейлер для визуального различения наборов совпадающих строк if/length/print
: еслиПредварительная линия непусто, затем выведите его print $0
: вывести текущую строку (соответствует 'To:' и $ 15> = 2019) prevline=$0
: установить переменную prevline в текущей строке(будет использоваться как «предыдущая строка» для следующей обрабатываемой строки)
И вывод:
#############
certificate1 - From: Friday, October 16, 2009 1:22:18 PM CEST To: Wednesday, October 16, 2019 1:32:16 PM CEST
#############
#############
this is line three
certificate4 - From: Friday, October 16, 2009 1:22:18 PM CEST To: Wednesday, October 16, 2019 1:32:16 PM CEST
#############
#############
this is line nine
certificate10 - From: Friday, October 16, 2009 1:22:18 PM CEST To: Wednesday, October 16, 2020 1:32:16 PM CEST
#############
#############
this is line eleven
certificate12 - From: Friday, October 16, 2009 1:22:18 PM CEST To: Wednesday, October 16, 2023 1:32:16 PM CEST
#############
#############
certificate12 - From: Friday, October 16, 2009 1:22:18 PM CEST To: Wednesday, October 16, 2023 1:32:16 PM CEST
certificate13 - From: Friday, October 16, 2009 1:22:18 PM CEST To: Wednesday, October 16, 2024 1:32:16 PM CEST
#############