使用 awk/bash 过滤 ldapsearch

J. *_*Doe 5 bash awk ldap sed openldap

通过编写ldapsearch如下命令:

ldapsearch -h ipaddress -p 389 -D "cn=func_01_acc,ou=admins,dc=akademia,dc=int" \
-w akademia.01 -b "ou=stud01,dc=akademia,dc=int" "(l=Torun)" sn cn telephonenumber -LLL |
grep sn: | awk '{print $2 "|" $1}' | sort | uniq -u 
Run Code Online (Sandbox Code Playgroud)

我得到输出:

 dn: uid=s21705,ou=stud01,dc=akademia,dc=int
 telephoneNumber: +78123793414
 cn: Benny Flowers

 dn: uid=s21711,ou=stud01,dc=akademia,dc=int
 telephoneNumber: +78123439058
 cn: Jacqueline Newton
Run Code Online (Sandbox Code Playgroud)

问题是:如何将其格式化为

Benny Flowers|+78123793414
JAcqueline Newton|+78123439058
Run Code Online (Sandbox Code Playgroud)

我走的最远的距离是:

ldapsearch -h ipaddress -p 389 -D "cn=func_01_acc,ou=admins,dc=akademia,dc=int" \
-w akademia.01 -b "ou=stud01,dc=akademia,dc=int" "(l=Torun)" sn cn telephonenumber -LLL |
grep sn: | grep  dn: | sed 's/telephoneNumber: //' | sed 's/cm: //'
Run Code Online (Sandbox Code Playgroud)

我有:

 +123123123
 Name Surname

 +123123123
 Name Surname
Run Code Online (Sandbox Code Playgroud)

我尝试用以下方法反转数字和名称:

 for ((i=0;i<$elements;i++)); do
      echo ${array[${i}]}
 done
Run Code Online (Sandbox Code Playgroud)

它打印了输出,但我无法找到如何将值传递给临时数组以获取名称和另一个处理数字的数组。

任何的意见都将会有帮助。

Joa*_*ais 2

如果将第一个输出通过管道传输到:

sed -rn '/ telephoneNumber: /{N;s/[^:]*: (.*)\n[^:]*: (.*)/\2|\1/p;}'
Run Code Online (Sandbox Code Playgroud)

你会得到:

Benny Flowers|+78123793414
Jacqueline Newton|+78123439058
Run Code Online (Sandbox Code Playgroud)

-En在 OSX 上使用。

sed将搜索每个telephoneNumber条目,N将其与下一行放在一起,()匹配姓名和电话号码,最后\2|\1格式化结果字符串。