Я хочу создать файл псевдонимов Postfix из LDIF-вывода ldapsearch
.
Файл LDIF содержит записи примерно для 10 000 пользователей. У каждого пользователя есть хотя бы одна запись для атрибута proxyAddresses
. Мне нужно создать псевдоним, соответствующий каждому proxyAddress, который соответствует условиям ниже. Созданные псевдонимы должны указывать на [email protected].
- Тип — SMTP или smtp (без учета регистра).
- Домен точно
contoso.com
Я не уверен, что порядок атрибутов в файле LDIF согласован. Я не думаю, что могу предположить, что sAMAccountName всегда будет отображаться последним.
Пример входного файла
dn: CN=John Smith,OU=Users,DC=contoso,DC=com
proxyAddresses: SMTP:[email protected]
proxyAddresses: smtp:[email protected]
proxyAddresses: smtp:[email protected]
proxyAddresses: MS:ORG/ORGEXCH/JOHNSMITH
sAMAccountName: smith
dn: CN=Tom Frank,OU=Users,DC=contoso,DC=com
sAMAccountName: frank
proxyAddresses: SMTP:[email protected]
proxyAddresses: smtp:[email protected]
proxyAddresses: smtp:[email protected]
proxyAddresses: MS:ORG/ORGEXCH/TOMFRANK
Пример выходного файла
smith: [email protected]
John.Smith: [email protected]
frank: [email protected]
Tom.Frank: [email protected]
Идеальное решение
Я хотел бы увидеть решение с использованием awk
, но приемлемы и другие методы. Вот качества, которые наиболее важны для меня, по порядку:
- Просто и читабельно. Самодокументирование лучше, чем однострочники.
- Эффективный. Это будет использовано тысячи раз.
- Идиоматический. Было бы неплохо сделать это "неправильным способом", если бы это не ставило под угрозу первые две цели.
Что я пробовал
Мне удалось начать с этого, но я изо всех сил пытаюсь понять тонкости awk.
- Я попытался использовать csplit для создания отдельных файлов для каждой записи в выводе LDIF, но это кажется расточительным, поскольку в конце мне нужен только один файл.
- Я попытался установить
RS=""
в awk, чтобы получить полные записи, а не отдельные строки, но тогда я не знал, что делать дальше. - Я попытался использовать awk, чтобы разбить большой файл LIDF на отдельные файлы для каждой записи, а затем обработать их с помощью другого сценария оболочки, но это казалось расточительным.