awk: печать текста между двумя шаблонами + x строк с последующим первым совпадением

Если вы устанавливаете пакет с помощью rpm , а не из репозитория yum, yum не будет знать, как определить, когда rpm был удален, потому что нет соответствующего репозитория, на который можно было бы ссылаться. Так что часть этого (MariaDB) нельзя сделать идемпотентной.

Если вы хотите сделать свой сценарий идемпотентным, лучшим подходом было бы использовать rpm -q для данного пакета, чтобы определить, установлен ли он, и использовать этот результат, чтобы решить, запускать ли yum.

Если вы используете rpm для установки пакета, yum не заметит сразу, но предупредит вас, когда вы попросите его обновить вашу систему, что база данных RPM была установлена ​​вне yum . По этой причине вы должны использовать yum install для установки пакетов MariaDB из вашего набора RPM.

2
27.06.2018, 18:13
2 ответа

Awk script:

extract_pat_space.awkсодержание:

$0 ~ "^#" pat{ f = 1; hash = 0 }
f { print }
NF == 1 && $1 == "#"{ 
    if (++hash == 2) { f = hash = 0 }
}

Использование (для обоих шаблонов):

$ awk -f extract_pat_space.awk -v pat="List" file > list_of_objects.txt
$ awk -f extract_pat_space.awk -v pat="Reports" file > reports.txt

Результаты:

$ cat list_of_objects.txt 
#List of Objects
#
# Headers
# Paths
Files not found /var/xxxxx
Files not found /etc/xxxxx
Files not found /mnt/xxxxx
Files not found /safd/xxxxx
#

$ cat reports.txt 
#Reports
#
Error-Number 123
Error Number 12345
#
1
27.01.2020, 22:09
awk '
    /#List of Objects/ {f = "objects.txt"} 
    /#Reports/         {f = "reports.txt"} 
    f                  {print > f}
' file

Когда вы увидите один из ключевых заголовков, установите имя выходного файла.
Если переменная была установлена, напечатайте в этот файл.

1
27.01.2020, 22:09

Теги

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