Разобрать текстовый файл и условно распечатать шаблоны в 2 выходных файлах [закрыто]

GNU awk:

awk 'ENDFILE { if(NR==FNR) print } NR!=FNR' infile{,}

Портативный awk:

awk 'NR!=FNR && !f { f=1; print p } NR!=FNR; { p=$0 }' infile{,}
0
22.04.2021, 12:23
2 ответа

Если ошибка всегда имеет один и тот же вывод, например, ПРЕДУПРЕЖДЕНИЕ имеет 6 строк, а ТЯЖЕЛАЯ — 8 строк, вы можете сделать что-то вроде следующего. Это не чистый ужин, но это даст некоторые результаты, которые вы ищете.

grep -A5 "WARNING" report  > warnings.txt
grep -A8 "SEVER" report  > errors.txt

предупреждения.txt

root@srva ~]# cat warnings.txt 
WARNING: no localized text available for:
ErrorCode : InvalidStateTransition
BundleName: CommonDomain_ErrorDictionary
Locale    : en_US
Reason    : XMlResourceException: ResourceBundleManager: Can not find resource bundle 'CommonDomain_ErrorDictionary'
РЯа. 19, 2021 4:14:16 PM com.lhs.FrameworkExtension.bscs_core.d getErrorMessage
WARNING: no localized text available for:
ErrorCode : InvalidStateTransition
BundleName: CommonDomain_ErrorDictionary
Locale    : en_US
Reason    : XMlResourceException: ResourceBundleManager: Can not find resource bundle 'CommonDomain_ErrorDictionary'
РЯа. 19, 2021 4:15:42 PM com.lhs.ccb.sfw.application.ServiceObjectImpl executeLocaleI
--
WARNING: no localized text available for:
ErrorCode : InvalidStateTransition
BundleName: CommonDomain_ErrorDictionary
Locale    : en_US
Reason    : XMlResourceException: ResourceBundleManager: Can not find resource bundle 'CommonDomain_ErrorDictionary'
РЯа. 19, 2021 4:15:42 PM com.lhs.FrameworkExtension.bscs_core.d getErrorMessage

ошибки.txt

[root@srva ~]# cat errors.txt 
SEVERE: ServiceObjectI.executeLocaleI CONTRACT.WRITE

Error code: CommonDomain.InvalidStateTransition
    at com.lhs.ccb.sfw.application.ServiceObjectImpl.execute(Unknown Source)
    at com.lhs.cil.core.AggregatedServiceObjectImpl.execute(Unknown Source)
    at com.lhs.ccb.sfw.application.ServiceObjectImpl.executeLocaleI(Unknown Source)
    at com.lhs.cil.core.AggregatedServiceObjectImpl.executeLocaleI(Unknown Source)
    at com.lhs.ccb.soi.ServiceObjectIPOA._invoke(Unknown Source)

--
SEVERE: ServiceObjectI.executeLocaleI CONTRACT.WRITE

0
28.04.2021, 22:51

Ваш входной файл в том виде, в котором он был первоначально опубликован, имеет вид:

$cat input.txt
Error code: CommonDomain.InvalidStateTransition
    at com.lhs.ccb.sfw.application.ServiceObjectImpl.execute(Unknown Source)
    at com.lhs.cil.core.AggregatedServiceObjectImpl.execute(Unknown Source)
    at com.lhs.ccb.soi.ServiceObjectIPOA._invoke(Unknown Source)

РЯа. 19, 2021 4:14:16 PM com.lhs.FrameworkExtension.bscs_core.d getErrorMessage
WARNING: no localized text available for:
ErrorCode : InvalidStateTransition
BundleName: CommonDomain_ErrorDictionary
Locale    : en_US
Reason    : XMlResourceException: ResourceBundleManager: Can not find resource bundle 'CommonDomain_ErrorDictionary'
РЯа. 19, 2021 4:14:16 PM com.lhs.FrameworkExtension.bscs_core.d getErrorMessage
WARNING: no localized text available for:
ErrorCode : InvalidStateTransition
BundleName: CommonDomain_ErrorDictionary
Locale    : en_US
Reason    : XMlResourceException: ResourceBundleManager: Can not find resource bundle 'CommonDomain_ErrorDictionary'
РЯа. 19, 2021 4:15:42 PM com.lhs.ccb.sfw.application.ServiceObjectImpl executeLocaleI
SEVERE: ServiceObjectI.executeLocaleI CONTRACT.WRITE

Error code: CommonDomain.InvalidStateTransition
    at com.lhs.ccb.sfw.application.ServiceObjectImpl.execute(Unknown Source)
    at com.lhs.cil.core.AggregatedServiceObjectImpl.execute(Unknown Source)
    at com.lhs.ccb.sfw.application.ServiceObjectImpl.executeLocaleI(Unknown Source)
    at com.lhs.cil.core.AggregatedServiceObjectImpl.executeLocaleI(Unknown Source)
    at com.lhs.ccb.soi.ServiceObjectIPOA._invoke(Unknown Source)

РЯа. 19, 2021 4:15:42 PM com.lhs.FrameworkExtension.bscs_core.d getErrorMessage
WARNING: no localized text available for:
ErrorCode : InvalidStateTransition
BundleName: CommonDomain_ErrorDictionary
Locale    : en_US
Reason    : XMlResourceException: ResourceBundleManager: Can not find resource bundle 'CommonDomain_ErrorDictionary'
РЯа. 19, 2021 4:15:42 PM com.lhs.FrameworkExtension.bscs_core.d getErrorMessage
WARNING: no localized text available for:
ErrorCode : InvalidStateTransition
BundleName: CommonDomain_ErrorDictionary
Locale    : en_US
Reason    : XMlResourceException: ResourceBundleManager: Can not find resource bundle 'CommonDomain_ErrorDictionary'
РЯа. 19, 2021 4:17:19 PM com.lhs.ccb.sfw.application.ServiceObjectImpl executeLocaleI
SEVERE: ServiceObjectI.executeLocaleI CONTRACT.WRITE

Попробуйте это:

$ awk 'BEGIN{FS=":";wflag=0;sflag=0} /^WARNING:|^SEVERE:/ {if ($1=="SEVERE") {sflag=1;print > "severe.txt";next;} else {wflag=1;print > "warning.txt";next;}} /^WARNING:|^SEVERE:/ {wflag=0; sflag=0; if ($1=="SEVERE") {print > "severe.txt";} else {print > "warning.txt";}} {if (sflag) {print > "severe.txt";}} {if (wflag) {print > "warning.txt";}}' input.txt

, где input.txt— это текстовый файл, в который записывается вся ваша информация. Вывод направляется либо на severe.txt, либо на warning.txt. Чтобы визуализировать содержимое этого файла, выполните:

$ cat {severe,warning}.txt

Вы можете написать этот -лайнер как awkскрипт, чтобы сделать его более читабельным:

$ cat awk_script

#! /usr/bin/awk
BEGIN {FS=":"; wflag=0; sflag=0}

/^WARNING:|^SEVERE:/ {
if ($1=="SEVERE") {
    sflag=1; print > "severe.txt";next;}
else {
    wflag=1; print > "warning.txt";next;}
}
/^WARNING:|^SEVERE:/ {
    wflag=0; sflag=0;
if ($1=="SEVERE") {
    print > "severe.txt";}
else {
    print > "warning.txt";}
}

{if (sflag) {print > "severe.txt";}}
{if (wflag) {print >"warning.txt";}}

Чтобы запустить скрипт, просто введите в терминале следующее:

$ awk -f awk_script input.txt
0
28.04.2021, 22:51

Теги

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