У меня есть следующий ldif:
dn: cn=Robert Smith,ou=people,dc=example,dc=com
objectclass: inetOrgPerson
cn: Robert Smith
cn: Robert J Smith
cn: bob smith
sn: smith
uid: rjsmith
userpassword: rJsmitH
carlicense: HISCAR 123
homephone: 555-111-2222
mail: r.smith@example.com
alias: rsmith@example.com
alias: bob.smith@example.com
description: nice hair
ou: Human Resources
dn: cn=John Doe,ou=people,dc=example,dc=com
objectclass: inetOrgPerson
cn: John Doe
cn: John Walker Doe
cn: Johnny
sn: Doe
uid: jdoe
userpassword: topsecret
carlicense: AKAHH 123
homephone: 123-458-362
mail: j.doe@example.com
alias: jdoe@example.com
alias: john.doe@example.com
description: cool guy
ou: Sales
Теперь я запускаю команду awk:
awk '/^mail:/ { mail = $2 }; {print mail };' ldif
Ожидаемый результат будет:
r.smith@example.com
j.doe@example.com
Фактический результат:
r.smith@example.com
r.smith@example.com
r.smith@example.com
r.smith@example.com
r.smith@example.com
r.smith@example.com
r.smith@example.com
r.smith@example.com
r.smith@example.com
r.smith@example.com
r.smith@example.com
r.smith@example.com
r.smith@example.com
r.smith@example.com
r.smith@example.com
r.smith@example.com
j.doe@example.com
j.doe@example.com
j.doe@example.com
j.doe@example.com
j.doe@example.com
Я не очень понимаю, почему awk выдает этот вывод несколько раз. Я был бы очень признателен, если бы кто-то мог мне это объяснить, так как я новичок в awk и раньше не пользовался им. Я уже консультировался с man-страницей и Google, но, похоже, я ищу там не те вещи ...
РЕДАКТИРОВАТЬ: я понимаю, что awk обрабатывает текстовые потоки в строках. Я предполагаю, что мой "print" просто печатает вывод так часто, как есть строки в моем файле ldif. Но как я могу предотвратить это от awk? Я хочу напечатать каждый результат только один раз ..