문제

나는 현재 쓰고 간단합니다.sh 스크립트를 구문 분석하는 수출입에 대한 로그 파일에 일치하는 문자열"o".현재할 때,보기 output.txt 모든 것이 있 0 에 인쇄해 모든 라인(606 선).내 나의 논리,잘못된 것입으로 awk 던지지 않는 어떤 오류가 있습니다.

여기에는 나의 코드(에 대해 업데이트 연결 및 카운터 문제).편집:내가 채택한 새로운드에서 dmckee 의 대답이 나는 이제 작업을 통해 코드에서는 은혜의 단순합니다.

awk '/o'\''/ {
         line = "> ";
         for(i = 20; i <= 33; i++) {
           line = line " " $i;
         }
         print line;
    }' /var/log/exim/main.log > output.txt

어떤 아이디어가?

편집:명확성을 위해,나는 grepping 에 대한"o"에서 이메일 주소기 때문에,'불법 캐릭터에서 이메일 주소(및에서 우리의 데이터베이스,나타나만으로'o-접두사 이름).

EDIT2:따라 해설 요청이 여기 살균 샘플의 일부를 원하는 출력:

[xxx.xxx.xxx.xxx] kathleen.o'toole@domain.com <kathleen.o'toole@domain.com> routing defer (-51): retry time not reached

[xxx.xxx.xxx.xxx] julie.o'brien@domain.com <julie.o'brien@domain.com> routing defer (-51): retry time not reached

[xxx.xxx.xxx.xxx] james.o'dell@domain.com <james.o'dell@domain.com> routing defer (-51): retry time not reached

[xxx.xxx.xxx.xxx] daniel_o'leary@domain.com <aniel_o'leary@domain.com> routing defer (-51): retry time not reached

는 이유는 시작에서 20 에 반복이기 때문에 모든 것을 하기 전에 20 분야은 표준 로그 정보는 필요하지 않은 나의 목적을 위해 여기에.모든 나가 필요로 하는 모든 것부터 IP 를 넘어 이 솔루션(는 메시지에 대한 각 550 오류에 대한 다른 각 메일 서버에서 사용가 있다.나는 컴파일 목록의 일반적인 것들)

도움이 되었습니까?

해결책

진짜 필요가 없을 위한 grep 니다 여기에.자 awk 를 선택 일치하는 라인은 당신을 위해(그리고 고정 연결을 버그로 당 ΤΖΩΤΖΙΟΥ):

awk '/o'\''/ {
             line = "> ";
             for(i = 20; i <= 33; i++) {
               line = line " " $i;
             }
             print line;
        }' /var/log/exim/main.log > output.txt

물론 당신은 필요 결국 어떤 이상한을 탈출 할 경우에 promp 다음과 같다.그것은 스크립트에서...


편집:첫 번째 패스에서 나를 놓쳤+=문제...

또한다고 가정하면 선을 준 위은 부분적으로,그것은 단지 13ish 필드(기본적으로 필드를 공백으로 구분).

다른 팁

+ 의 숫자 추가에서 awk.를 연결할하려는 경우,다만 상수 및/또는 식으로 구분 공간이 있습니다.

그래서 이

line += " " + $i

해야가

line = line " " $i

편집: Iff 수출입 로그 파일을(나는 더 후위:)구분되는 하나의 공간에,아니면 다음이 더 간단하다:

grep -F o\' /var/log/exim/main.log | cut -d\  -f20-33 >output.txt

?

"'"이지에서 불법 로컬 부분입니다.서 RFC2821, 섹션 4.1.2:

Local-part = Dot-string / Quoted-string

Dot-string = Atom *("." Atom)

Atom = 1*atext

2821 한 참조 RFC2822 비 로컬로 정의된 요소,그래서:

atext           =       ALPHA / DIGIT / ; Any character except controls,
                        "!" / "#" /     ;  SP, and specials.
                        "$" / "%" /     ;  Used for atoms
                        "&" / "'" /
                        "*" / "+" /
                        "-" / "/" /
                        "=" / "?" /
                        "^" / "_" /
                        "`" / "{" /
                        "|" / "}" /
                        "~"

다시 말해서,"'는"완벽하게 합법적이지 않은 characted 을 이메일 localpart.지금,그것은 법적되지 않을 수 있습니다 귀하의 사이트에서, 지만,당신이 무엇을 말했다.

죄송지 않는 체재에서 직접 항목,그리고 올바른 귀하의 주장하고 있습니다.

작업,그리고 간단히:python.

import fileinput
for line in fileinput.input():
    if "'" in line:
        fields = line.split(' ')
        print "> ", ' '.join( fields[20:34] )
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top