Как я могу извлечь все разговоры в журнале Postfix из определенного реле, используя awk? - PullRequest
0 голосов
/ 18 ноября 2010

Я пытаюсь извлечь адрес from из IP-адреса отправляющего реле в файле журнала postfix

Любые идеи ???

Большое спасибо за любую помощь

Кен

Nov 16 00:05:10 mailserver pfs/smtpd[4365]: 925D54E6D9B: client=client1[1.2.3.4]   
Nov 16 00:05:10 mailserver pfs/cleanup[4413]: 925D54E6D9B: message-id=<11414>    
Nov 16 00:05:10 mailserver pfs/qmgr[19118]: 925D54E6D9B: from=<11414@localhost>, size=40217, nrcpt=1 (queue active)    
Nov 16 00:05:10 mailserver pfs/smtp[4420]: 925D54E6D9B: to, relay=[1.3.5.7]:25, delay=0.02, delays=0.02/0/0/0, dsn=5.0.0, status=bounced (host [1.3.5.7] refused to talk to me: 550 Please remove this address from your list)   
Nov 16 00:05:10 mailserver pfs/bounce[4310]: 925D54E6D9B: sender non-delivery notification: 972E34E6D9F   
Nov 16 00:05:10 mailserver pfs/qmgr[19118]: 925D54E6D9B: removed

Ответы [ 2 ]

0 голосов
/ 27 ноября 2010
$7 ~ /^from=,$/ {
    from[$6] = substr($7, 7, length($7) - 8)
} 
$8 ~ /^relay=\[/ { 
    if (substr($8, "[1.3.5.7]")) 
        print from[$6]
    delete from[$6]}
}

Каждый раз, когда просматривается строка записи, она сохраняется в ассоциативном массиве, проиндексированном по идентификатору очереди сообщения.Когда видна релейная линия, печатается ли она для интересующей вас релейной линии.substr () используется только для того, чтобы вам не пришлось \ -экранировать все метасимволы - "[", "]", ".".Будь то реле, которое вам интересно или нет, данные from очищаются, чтобы массив не рос без границ.

0 голосов
/ 18 ноября 2010

Хм, если вы просто хотите собрать поля из и relay с их отображением, вы можете использовать это:

/: from=/ { lastFrom = $7 }
/relay=/ { print lastFrom, $8 }

Если вы действительно хотите извлечь адреса ядра, они становятся немного более сложными ...

/: from=/ { lastFrom = $7 }
/relay=/ {
  r = $8
  gsub(/from=</, "", lastFrom)
  gsub(/>,*/, "", lastFrom)
  gsub(/relay=\[/, "", r)
  gsub(/\].*/, "", r)
  print lastFrom, r
}

$ awk -f mail2.awk mail.dat
11414@localhost 1.3.5.7

Как обычно, эти решения работают как в The One True Awk, так и в gawk.

...