$
$
$ cat f3
dn: uid=peter@example.com,ou=example-com,ou=mail,dc=example,dc=to
cn: Peter
sn: Norton
displayName: Peter Norton
dn: uid=ras@example.com,ou=example-com,ou=mail,dc=example,dc=to
cn: Ras
sn: Kam
displayName: Ras Kam
dn: uid=james@mi6.com,ou=example-com,ou=mail,dc=example,dc=to
cn: James
sn: Bond
displayName: James Bond
dn: uid=Bat@example.com,ou=example-com,ou=mail,dc=example,dc=to
cn: Bat
sn: Man
displayName: Bat Man
$
$ ##
$ perl -lne 'if (/^.*?uid=(.*?\@example.com).*$/){$x="email:$1"}
> elsif(/^displayName: (.*?)$/ && $x){push @a, "$x Name: $1"; $x=""}
> END {print foreach (sort @a)}' f3
email:Bat@example.com Name: Bat Man
email:peter@example.com Name: Peter Norton
email:ras@example.com Name: Ras Kam
$
$
tyler_durden
Looks like you asked for a case-insensitive sort. Here's an idea -
$
$
$ cat f3
dn: uid=peter@example.com,ou=example-com,ou=mail,dc=example,dc=to
cn: Peter
sn: Norton
displayName: Peter Norton
dn: uid=adam@example.com,ou=example-com,ou=mail,dc=example,dc=to
cn: adam
sn: smith
displayName: adam smith
dn: uid=james@mi6.com,ou=example-com,ou=mail,dc=example,dc=to
cn: James
sn: Bond
displayName: James Bond
dn: uid=Bat@example.com,ou=example-com,ou=mail,dc=example,dc=to
cn: Bat
sn: Man
displayName: Bat Man
$
$
$ perl -lne 'if (/^.*?uid=(.*?\@example.com).*$/){$x="email:$1"}
> elsif(/^displayName: (.*?)$/ && $x){push @y, "$x Name: $1"; $x=""}
> END {print foreach (sort {uc($a) cmp uc($b)} @y)}' f3
email:adam@example.com Name: adam smith
email:Bat@example.com Name: Bat Man
email:peter@example.com Name: Peter Norton
$
$
The prior script, when run on this file will put "Bat Man" before "adam smith" because ascii('B') < ascii('a').
HTH,
tyler_durden