我不是一位经验丰富的shell脚本编写者,所以我希望得到一些专家的帮助!
我们在循环通过UID的for循环中使用以下命令:
ldapsearch -x -H ldaps://ldap-purple.example.com -b ou=People,dc=example,dc=com uid=jdoe
此命令产生如下记录:
# extended LDIF
#
# LDAPv3
# base <ou=People,dc=example,dc=com> with scope subtree
# filter: uid=jdoe
# requesting: ALL
#
# jdoe, people, example.com
dn: uid=jdoe,ou=people,dc=example,dc=com
cn: John Doe
homeDirectory: /afs/rats.example.com/users/t/jdoe
loginShell: /bin/bash
objectClass: posixAccount
uid: jdoe
uidNumber: 9239
gidNumber: 100002
# search result
search: 2
result: 0 Success
# numResponses: 2
# numEntries: 1
我想做的是能够grep或awk(或其他)然后在同一行生成'cn','uid'和'uidNumber',即
John Doe, jdoe, 9239
然而,我不确定可以使用什么工具来创建它。
先谢谢你的帮助!
干杯,丹
答案 0 :(得分:2)
是的,使用awk很容易。鉴于你说这是在一个循环中运行,我在一个基本循环的解决方案中草绘,这可能或可能不匹配你正在做的事情。希望您能看到如何适应您的确切需求。
while read ou dc1 dc2 uid ; do
dapsearch -x -H ldaps://ldap-purple.example.com -b ou="$ou",dc1="$dc1",dc="$dc2" uid="$uid" \
| gawk -F":" '
$1=="cn" { cn = $2; sub(/^ */,"", cn); next}
$1=="uid" { uid = $2; sub(/^ */,"", uid);next}
$1=="uidNumber" { uidNumber = $2; sub(/^ */,"", uidNumber );next}
# ... etc
END {
printf("%s,%s,%s\n", cn,uid,uidNumber)
}
'
done < /path/to/ldap_lookup.lst
<强>输出强>
John Doe,jdoe,9239
(使用上面的样本记录作为输入)
如果出于某种原因需要记录中的前导空格,请取出sub()
cmds。
我没有ldapsearch来测试。如果你收到错误消息,gawk非常适合显示问题的位置,如果它不是确定问题点的确切位置,那么通常在此之前。将错误消息发布为评论,我会看到我能做些什么。
IHTH
答案 1 :(得分:1)
awk 'BEGIN { RS = "gidNumber: [0-9]+" ; FS = "\n" ; OFS=","}
{ for (i=1;i<=NF;i++) {
if ($i ~ "^cn: ") { cn=gensub("^cn: ","","g",$i) }
if ($i ~ "^uidNumber: ") { uidNum=gensub("^uidNumber: ","","g",$i) }
if ($i ~ "^uid: ") { uid=gensub("^uid: ","","g",$i) }
}
if ( cn > "" && uid > "" && uidNum > "" ) {
print cn, uid, uidNum
}
cn="" ; uid="" ; uidNum=""
}' INPUTFILE
可能会为你工作。 See it in action at ideone.com(我已经添加了一条测试记录)。
答案 2 :(得分:1)
感谢您的回答,我会尝试所有这些!
在我看到你的回复之前,我一起废弃了以下内容,虽然丑陋但是诀窍:
ldapsearch -x -H ldaps://ldap-purple.example.com -b ou=People,dc=example,dc=com uid=$i | awk -F': ' '/uid:/ {ORS=",";print $2} /uidNumber/ {ORS="\n";print $2} /cn/ {ORS=",";split ($2,fields,"-"); print fields[1]}'