我想从ldapsearch
.
LDIF 文件包含大约 10,000 个用户的记录。每个用户至少有一个proxyAddresses
属性条目。我需要为每个满足以下条件的 proxyAddress 创建一个别名。创建的别名必须指向 sAMAccountName@other.domain。
- 类型为 SMTP 或 smtp(不区分大小写)
- 域正是
contoso.com
我不确定 LDIF 文件中的属性顺序是否一致。我认为我不能假设 sAMAccountName 总是最后出现。
示例输入文件
dn: CN=John Smith,OU=Users,DC=contoso,DC=com
proxyAddresses: SMTP:smith@contoso.com
proxyAddresses: smtp:John.Smith@contoso.com
proxyAddresses: smtp:jsmith@elsewhere.com
proxyAddresses: MS:ORG/ORGEXCH/JOHNSMITH
sAMAccountName: smith
dn: CN=Tom Frank,OU=Users,DC=contoso,DC=com
sAMAccountName: frank
proxyAddresses: SMTP:frank@contoso.com
proxyAddresses: smtp:Tom.Frank@contoso.com
proxyAddresses: smtp:frank@elsewhere.com
proxyAddresses: MS:ORG/ORGEXCH/TOMFRANK
示例输出文件
smith: smith@other.domain
John.Smith: smith@other.domain
frank: frank@other.domain
Tom.Frank: frank@other.domain
理想的解决方案
我希望看到使用的解决方案awk
,但其他方法也可以接受。以下是对我来说最重要的品质,按顺序排列:
- 简单易读。自我记录比单行记录更好。
- 高效的。这将被使用数千次。
- 惯用语。如果不损害前两个目标,那么“以 awk 方式”执行它会很好。
我试过的
我已经设法开始了这一点,但我很难理解 awk 的细节。
- 我尝试使用 csplit 为 LDIF 输出中的每条记录创建单独的文件,但这似乎很浪费,因为我最后只想要一个文件。
- 我尝试
RS=""
在 awk 中设置以获取完整的记录而不是单独的行,但后来我不确定从那里去哪里。 - 我尝试使用 awk 将大 LIDF 文件拆分为每个记录的单独文件,然后使用另一个 shell 脚本处理这些文件,但这似乎很浪费。