Кажется, вы говорите, что частью того, что вы не понимаете, является синтаксис триггера регулярного выражения awk
, который это то, из чего он черпает большую часть своей силы. Для упрощения структуру сценария awk
можно описать следующим образом:
BEGIN {
Things to do before processing data
}
/needle/ {
Things to do when a record contains a match for the regex /needle/
}
expression {
Things to do for each record when the expression evaluates to true (i. e. nonzero)
}
{
Things to do for all input records
}
END {
Things to do after all records have been processed
}
Чтобы расширить это для строк, на которые вы ссылаетесь:
/^ORA-.*:|^PLS-.*:|^SP2-.*/ {
stuff
}
/^ORA-.*:|^PLS-.*: |^SP2-.*/
— это регулярное выражение, которое соответствует любой строке, соответствующей любому из следующих критериев:
ORA-
, с :
после нуля или более последующих символов PLA-
, с :
после нуля или более последующих символов SP2-
Код в фигурные скобки, следующие за этим выражением, будут выполняться для любой соответствующей записи.
/^ERROR/ {
stuff
}
Более простое регулярное выражение, которое соответствует любой строке, начинающейся с ERROR
.
/\[.*\]\|Error.*/ {
stuff
}
Еще одно регулярное выражение, на этот раз сопоставляющее строку, начинающуюся с любой пары совпадающих квадратных скобок, или любую строку со строкой Error
.
gsub("[[:space:]]+^B", "^B");
gsub("^B[[:space:]]+", "^B");
Они заменят любую последовательность символов, совпадающую с пробелом, за которой следует символ Ctrl+B в первом случае или в обратном порядке во втором, на простой Ctrl+B. Имейте в виду, что этот управляющий символ был определен в строфе BEGIN
как разделитель полей.