首页 > 解决方案 > ldapsearch - 将输出格式化为按用户分组

问题描述

我有一个 ldapsearch 查询,例如:

ldapsearch -Y GSSAPI -b dc=level1,dc=level2,dc=level3 '(userid=123)' userid,email1,email2,email3

这将为 user123 返回以下内容:

mail1: something1@test.com
mail2: something2@test.com
mail3: something3@test.com
userid: 123

问题是,我不会只为 user123 这样做——我将为成千上万的用户这样做。理想情况下,我希望输出是这样的,每个用户一行:

123,something1@test.com,something2@test.com,something3@test.com
456,else1@test.com
789,other1@test.com,other2@test.com
...

或者更好的是,这个:

123,something1@test.com
123,something2@test.com
123,something3@test.com
456,else1@test.com
789,other1@test.com
789,other2@test.com
...

请注意,用户可以拥有不同数量的电子邮件地址。有没有办法实现这种格式?现在,我有这样的事情:

ldapsearch -Y GSSAPI -b dc=level1,dc=level2,dc=level3 '(userid=123)' userid,email1,email2,email3 | grep -E '^userid:*|^mail1:*|^mail2:*|^mail3:*' | sed 's/^ *//' | awk '!seen[$0]++'

对于 user123,这让我:

something1@test.com
something2@test.com
something3@test.com
123

但如果我添加| paste -sd ',',它将连接所有 100k+ 用户的结果。我想每个用户有一条线。

标签: unixsedgrepformattingldap

解决方案


单独使用 ldap 命令是无法实现这种输出的。需要将 ldap 命令的输出重定向到一个文件,然后有一个 java/shell/python 脚本来读取文件并根据需要重新格式化。


推荐阅读