Хм, если вы просто хотите собрать поля из и 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.