unix - 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+ 用户的结果。我想每个用户有一条线。
解决方案
单独使用 ldap 命令是无法实现这种输出的。需要将 ldap 命令的输出重定向到一个文件,然后有一个 java/shell/python 脚本来读取文件并根据需要重新格式化。
推荐阅读
- python - 当纯文本字符数 > 16 时,C# 到 Python 密文不同
- javascript - Vue.js 3 和 webpack 5 的 HMR / 热模块替换问题
- arrays - 我的 CHAR 到 BINARY 转换为 ARRAY 不起作用
- python - 深度图(从 ipad 的激光雷达生成)过滤
- java - Spark Streaming 数据帧持久化操作
- python - 如何调用 Open CV Durand Tonemap 功能?
- javascript - 如何在 gatsby js 文件中插入 google anylitics 标签?
- java - Redis (jedis) 无法删除带下划线的键
- sql - Postgres CROSSTAB 查询无法获得所有预期的列
- javascript - 无法访问的语句,menuItem.setActionView(R.layout.theme_switch);