sedまたはgrepを使用してパターンの前の行を検索する方法

sedまたはgrepを使用してパターンの前の行を検索する方法

ログファイルがありますが、ouput.logログファイルの内容は次のとおりです。ログファイルは.sql複数のファイル出力を順番に設定します。ログファイルには、実行中のSQLファイルの例が含まれています。 --> @/opt/DBA/HIP/FILES/Environments/PRDO/347_WT_04NOV2020.sqlORAモードを使用する任意の時点でエラーが発生する可能性がある「n」個のSQL文を含めることができます。したがって、コマンドがORA-を見つけるたびに無効なファイル名を取得する必要があります。

== Files executed in PRDO ==

== PRDO Execution spool ==
SQL> @/opt/DBA/HIP/FILES/Environments/PRDO/347_WT_04NOV2020.sql
SQL> ------UHIPOPS-36625---
SQL>
SQL> SET DEFINE OFF;
SQL>
SQL> ALTER SESSION SET CURRENT_SCHEMA = HIS_PD;

Session altered.

Elapsed: 00:00:00.00
SQL>
SQL> INSERT INTO msg (MSG_ID,
  2                   LANG_CD,
  3                   SVR_CD,
  4                   MSG_DSC)
  5       VALUES (92012,
  6               'EN',
  7               1,
  8               'Please enter the EIN in the correct format: XX-XXXXXXX.');

1 row created.

Elapsed: 00:00:00.03
SQL>
SQL> INSERT INTO msg (MSG_ID,
  2                   LANG_CD,
  3                   SVR_CD,
  4                   MSG_DSC)
  5       VALUES (92012,
  6               'ES',
  7               1,
  8               'Ingrese el EIN en el formato correcto: XX-XXXXXXX.');

ORA-

Elapsed: 00:00:00.00
SQL>
SQL> INSERT INTO msg (MSG_ID,
  2                   LANG_CD,
  3                   SVR_CD,
  4                   MSG_DSC)
  5       VALUES (92012,
  6               'PT',
  7               1,
  8               'Introduza o EIN no formato correto: XX-XXXXXXX.');

1 row created.

Elapsed: 00:00:00.00
SQL>
SQL> COMMIT;

Commit complete.

Elapsed: 00:00:00.00

SQL> @/opt/DBA/HIP/FILES/Environments/PRDO/348_WT_04NOV2020.sql
SQL> ------UHIPOPS-36625---
SQL>
SQL> SET DEFINE OFF;
SQL>
SQL> ALTER SESSION SET CURRENT_SCHEMA = HIS_PD;

Session altered.

Elapsed: 00:00:00.00
SQL>
SQL> INSERT INTO msg (MSG_ID,
  2                   LANG_CD,
  3                   SVR_CD,
  4                   MSG_DSC)
  5       VALUES (92012,
  6               'EN',
  7               1,
  8               'Please enter the EIN in the correct format: XX-XXXXXXX.');

1 row created.

Elapsed: 00:00:00.03
SQL>
SQL> INSERT INTO msg (MSG_ID,
  2                   LANG_CD,
  3                   SVR_CD,
  4                   MSG_DSC)
  5       VALUES (92012,
  6               'ES',
  7               1,
  8               'Ingrese el EIN en el formato correcto: XX-XXXXXXX.');

1 row created.

Elapsed: 00:00:00.00
SQL>
SQL> INSERT INTO msg (MSG_ID,
  2                   LANG_CD,
  3                   SVR_CD,
  4                   MSG_DSC)
  5       VALUES (92012,
  6               'PT',
  7               1,
  8               'Introduza o EIN no formato correto: XX-XXXXXXX.');

ORA-

Elapsed: 00:00:00.00
SQL>
SQL> COMMIT;

Commit complete.

Elapsed: 00:00:00.00

上記のログファイルの例では、2つのキャプチャされたSQLファイルを実行しましたが、両方のファイルでエラーが発生しましたORA-。これで、エラーSQLのファイル名を取得するコマンドまたは方法はありますか?出力は次のようにする必要があります

347_WT_04NOV2020.sql
348_WT_04NOV2020.sql

私が知っているのは基本です。grep "ORA-" output.logORA-がoutput.logにある場合、出力が提供されます。

ベストアンサー1

使用awk:

awk -F'/' '/^SQL> @/{ filename=$NF; next } /^ORA-/{ print filename; }' infile

おすすめ記事