명령을 실행할 때:
awk '/from/ {print $7} /to/ { print $7}' erroMuitoDoido.txt
파일은 다음과 같습니다
May 19 04:44:43 server postfix/smtpd[32595]: CDAB515013: client=servidor.dominio.com.br[10.10.10.44]
May 19 04:44:43 server postfix/cleanup[18651]: CDAB515013: message-id=<[email protected]>
May 19 04:44:43 server postfix/qmgr[16684]: CDAB515013: [email protected], size=19590, nrcpt=1 (queue active)
May 19 04:44:50 server postfix/pipe[32596]: CDAB515013: [email protected], relay=dovecot, delay=6.2, delays=0.02/6/0/0.14, dsn=2.0.0, status=sent (delivered via dovecot service)
May 19 04:44:50 server postfix/qmgr[16684]: CDAB515013: removed
출력은 다음과 같습니다
[email protected],
[email protected],
[email protected],
문제는 "라는 라인이다.[이메일 보호됨],"가 두 번 나타납니다. 이 문제를 어떻게 해결할 수 있나요?
AWK 버전: GNU Awk 4.0.0
운영 체제: Debian 6, OpenSuse 12.1, CentOS 6.2
답변1
답변2
입력이 해당 패턴과 일치하면 모든 작업이 순차적으로 수행됩니다. 입력이 두 패턴 모두와 일치하면 두 작업이 모두 수행됩니다.
하나의 패턴과 일치하는지 또는 다른 패턴과 일치하는지에 관계없이 필드를 인쇄하려면 다음 두 가지를 결합하십시오.
awk '/from/ || /to/ { print $7}' erroMuitoDoido.txt
여기서 두 표현식을 하나의 정규식 일치로 결합할 수 있습니다.
awk '/from|to/ { print $7}' erroMuitoDoido.txt
from
현재 수행 중인 작업에 대해 일치 항목을 필드 시작 부분에 고정해야 합니다 . 하위 문자열 또는 다음이 포함된 이메일 주소를 일치시키고 싶지 않을 수도 있기 때문입니다 to
.
awk '$7 ~ /^(from|to)=/ { print $7}' erroMuitoDoido.txt
다른 처리를 원하는 경우, 보다 정확한 일치를 통해 패턴이 겹치지 않으므로 별도의 작업을 사용할 수 있습니다.
awk '$7 ~ /^from=/ { … } $7 ~ /^to=/ { … }' erroMuitoDoido.txt
더 이상 처리를 중지하고 다음 줄로 이동하려면 키워드를 사용할 수 있습니다 next
.