특정 단어 추출 스크립트

chunj101의 이미지

Oracle 얼럿로그에서 특정 단어만 추출하고 싶은데 이게 잘 안되네요 ㅠㅠ
여기저기 찾아봐도 줄단위로 추출하는건 많은데 단어만 추출하려니 구현이 어렵네요...(제가 부족한 탓이겠지요 ㅠㅠ)

너무 해결이 안되어 질문좀 드리겠습니다.

일단 로그파일의 패턴은 이렇습니다.

opiodr aborting process unknown ospid (13781) as a result of ORA-609
ORA-00020: maximum number of processes (2000) exceeded
ORA-20 errors will not be written to the alert log for

ORA-0000: 설명
위와 같은 패턴 하나라면 어찌어찌 해보겠는데 위와 같이 대략 3가지 유형으로 에러로그가 떨어집니다.
여기에서 패턴으로 잡을수 있는건 "ORA-00000" 입니다. (숫자의 자리수 또한 가변적)

제가 추출하고 싶은 문자열은 바로 위 패턴인 "ORA-00000" 입니다.

위 로그파일 예제를 아래와 같이 ORA-00000 만 추출되도록 스크립트를 작성하고 싶습니다.

ORA-609
ORA-00200
ORA-20

awk나 sed를 쓰면 될것 같은데 이게 잘 안되네요.. 도움좀 부탁드리겠습니다~

chanik의 이미지

sed로 아래와 같이 하면 그럭저럭 되네요.
각 줄에서 ORA-n... 패턴만 남기고 몽땅 없애버린 뒤에,
그런 식의 교체가 성공한 경우에만 출력하는 식입니다.

$ cat test.log
opiodr aborting process unknown ospid (13781) as a result of ORA-609
ORA-00020: maximum number of processes (2000) exceeded
ORA-20 errors will not be written to the alert log for
$ cat test.log | sed -n -e "s/.*\(ORA-[0-9]\+\).*/\1/p"
ORA-609
ORA-00020
ORA-20

한 줄에 ORA-n... 패턴이 두 번 이상 등장할 경우엔 마지막 것이 출력되네요.

$ echo "ORA-12345 and ORA-67890 error" | sed -n -e "s/.*\(ORA-[0-9]\+\).*/\1/p"
ORA-67890

ORA- 뒤에 나오는 숫자의 길이를 한정하려면 아래와 같이 할 수 있습니다.
숫자가 3 ~ 5자리로 된 것만 찾아 출력하는 예입니다.

$ cat test.log | sed -n -e "s/.*\(ORA-[0-9]\{3,5\}\).*/\1/p"
ORA-609
ORA-00020

chunj101의 이미지

딱 제가 원했던 방식이네요. ㅎㅎ 감사합니다~
패턴 검색까지는 했었는데 줄전체로 치환이 안되어 고민이었는데 감사합니다~^^

chanik의 이미지

grep이나 awk를 써서 아래와 같이 해도 되네요.
특히 grep -o 옵션은 한 줄에 여러 개가 매치되어도 다 출력해 주는군요.

$ cat test.log | grep -o "ORA-[0-9]\+"
ORA-609
ORA-00020
ORA-20
$ echo "ORA-12345 and ORA-67890 error" | grep -o "ORA-[0-9]\+"
ORA-12345
ORA-67890

$ cat test.log | awk 'match($0,"ORA-[0-9]+") {print substr($0,RSTART,RLENGTH)}'
ORA-609
ORA-00020
ORA-20
$ cat test.log | awk 'match($0,"ORA-[0-9]+",arr) {print arr[0]}'
ORA-609
ORA-00020
ORA-20
익명 사용자의 이미지

grep -o 옵션이 정석인 것 같네요. 요긴하게 써먹을 수 있을 것 같은데 잘 배워 갑니다.

정 닭 잡는 데 소 잡는 칼 쓰고 싶으면 flex 같은 scanner generator를 써도 되긴 될겁니다. 과연 더 빠를까요? 잘 모르겠네요.

%{
#include <stdio.h>
%}
 
%option batch noyylineno noyywrap
 
WORD    "ORA-"[0-9]+
 
%%
{WORD}  {
            puts(yytext);
        }
.
%%
 
int main(void){
    yylex();
    return 0;
}

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.