заменить строку, присутствующую в N-й строке после совпадения в строке - PullRequest
0 голосов
/ 26 ноября 2018

У меня есть скрипт, который отформатирован, как показано ниже.

здесь, в моем примере, мне нужно найти «Probable Cause:Unspecified», и как только я нашел, мне нужно заменить строку на 4-ю строку ниже.

Фактический вывод:

Serial : blah blah blah
A-TYPE: blah blah blah
O-type: blah blah blah
instance: blah blah blah
fault: blah blah blah
sev: blah blah blah
Probable Cause: Unspecified reason
ack: blah blah blah
time: blah blah blah
Specific Event MOC: blah blah blah
cause: blah blah blah
Specific Problem: blah blah blah

и после того, как найдена строка "Вероятная причина: причина не указана", если найдена Probable Cause, следует заменить на Specific Event MOC

требуется окончательный вывод:

Serial : blah blah blah
A-TYPE: blah blah blah
O-type: blah blah blah
instance: blah blah blah
fault: blah blah blah
sev: blah blah blah
Specific Event MOC: Unspecified reason
ack: blah blah blah
time: blah blah blah
Probable Cause: blah blah blah
cause: blah blah blah
Specific Problem: blah blah blah

помогите пожалуйста

Ответы [ 2 ]

0 голосов
/ 08 апреля 2019

ваши данные в 'd', от gnu sed;

sed -E '/^Probable Cause:/{N;N;N;s/([^:]+)(:.+\n.+\n.+\n)([^:]+):(.+)/\3\2\1/}' d
0 голосов
/ 26 ноября 2018

Вот 2 прохода awk решение:

awk 'BEGIN{FS=OFS=":"}
FNR == NR {
   r[FNR]=$1
   next
}
/^Probable Cause:/ {
   $1 = r[FNR+3]
   n=FNR
}
FNR == n+3 && /^Specific Event / {
   $1 = r[FNR-3]
} 1' file file

Serial : blah blah blah
A-TYPE: blah blah blah
O-type: blah blah blah
instance: blah blah blah
fault: blah blah blah
sev: blah blah blah
Specific Event MOC: Unspecified reason
ack: blah blah blah
time: blah blah blah
Probable Cause: blah blah blah
cause: blah blah blah
Specific Problem: blah blah blah

Объяснение:

  • BEGIN блок устанавливает разделители входного и выходного полей как :
  • FNR == NR: при обработке файла 1 раз
  • r[FNR]=$1: сохранять первые столбцы по ключу как их запись №
  • next: перейти к следующей записи
  • Теперь awk будет обрабатывать файл во второй раз
  • /^Probable Cause:/: Когда мы найдем этот текст в записи
  • $1 = r[FNR+3]: Установить 1-й столбец как 1-й столбец 3-й записи впереди текущего
  • n=FNR: сохранить текущую запись в переменной n
  • FNR == n+3 && /^Specific Event /: если текущая запись n+3 имы получаем строку, начинающуюся с Specific Event
  • $1 = r[FNR-3]: установить 1-й столбец как 1-й столбец 3-й предыдущей записи из текущей
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...