문제
나는 현재 쓰고 간단합니다.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] )