Обнаружение и удаление паттернов Korn Shell - PullRequest
1 голос
/ 15 октября 2019

Я работаю с Korn Shell, чтобы попытаться обнаружить сообщения об ошибках в плоском файле, которые не нужны. Плоский файл имеет несколько записей об ошибках, где некоторые из них могут быть удалены, а другие должны быть сохранены. Ошибки, такие как:

Сообщение: TR0405 Серьезность: 04 Полученные данные приложения будут игнорироваться. бла-бла-бла.

Необходимо удалить, в то время как сообщение с любым другим кодом должно быть сохранено. У меня проблемы с удалением этой записи, при этом следующая запись остается нетронутой. Я хочу удалить из обнаруженного шаблона

Сообщение: TR0405 Серьезность: 04

К следующему обнаруженному шаблону просто

Сообщение:

Мой текущий код:

sed -e "/Message: TR0405 Severity: 04/,/Message:/{//p;d;}" test.txt > newTest.txt
  rm test.txt
  mv newTest.txt test.txt

Пример данных:

Сообщение: TR0405 Серьезность: 04

Получены данные приложениябудут игнорироваться

бла-бла-бла.

Сообщение: TR0405 Серьезность: 04

Полученные данные приложения будут игнорироваться.

бла-бла-бла.

Сообщение: TR0405 Серьезность: 04

Полученные данные приложения будут игнорироваться.

бла-бла-бла.

Больше бла-бла-бла.

Сообщение: TR0425 Серьезность: 04

Ошибка синхронизации.

бла-бла-бла.

1 Ответ

1 голос
/ 15 октября 2019

Как насчет чего-то вроде: (отредактировано для учета в новом примере)

#!/bin/ksh

Logfile=$1

while read line; do
    if [[ $line == Message* ]]; then
        flag=0
        case $line in
            *TR0405*)       continue
                            ;;
            "")     continue
                    ;;
            *)      print $line >> logresult.txt
                    flag=1
                    ;;
        esac
    elif [[ $flag -eq 1 ]]; then
        print $line >> logresult.txt
    fi
done < $Logfile

Вы можете добавить любой код ошибки в операторе case. С вами пример данных, это хорошо работает.

...