로그 파일이 있는데 ouput.log
로그 파일의 내용은 다음과 같습니다. 로그 파일은 .sql
여러 파일 출력을 순서대로 구성합니다. 로그 파일에는 실행 중인 SQL 파일의 예가 포함됩니다. --> @/opt/DBA/HIP/FILES/Environments/PRDO/347_WT_04NOV2020.sql
ORA 모드를 사용하는 어느 지점에서나 오류가 발생할 수 있는 '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
위 로그 파일의 예에서는 두 개의 캡처된 SQL 파일을 실행했는데 두 파일 모두에서 오류가 발생했습니다 ORA-
. 이제 오류 SQL의 파일 이름을 가져오는 명령이나 방법이 있습니까? 출력은 다음과 같아야합니다
347_WT_04NOV2020.sql
348_WT_04NOV2020.sql
내가 아는 것은 기본입니다. grep "ORA-" output.log
ORA-가 output.log에 있으면 출력이 제공됩니다.
답변1
사용 awk
:
awk -F'/' '/^SQL> @/{ filename=$NF; next } /^ORA-/{ print filename; }' infile
답변2
sed
다음 버전이 있습니다 xargs
.
sed -n '/^SQL> @/{s/^SQL> @//;h};/^ORA-/{g;p;}' output.log | xargs -L1 basename
-n
명시적인 인쇄 명령이 있는 줄만 표시되도록 기본 출력을 억제합니다.- 첫 번째
sed
일치는 경로와 파일 이름을 가져와서h
버퍼에 저장합니다(). - 두 번째
sed
일치 항목은 버퍼의 내용을 가져오고(g
) 이를 인쇄합니다(p
) xargs
출력의 각 줄을 보내면basename
파일 이름 부분만 표시됩니다.