bt707
asked on
Perl - sort and print phone numbers
I have a file with user name, telephone numbers and the addn for each user where each is separated by a blank line such as:
__________________________ __________ __________ __________ __________ __________ ____
dn: cn=John Doe,ou=employee,o=abc,c=AN
telephonenumber: +1 432 111 2222
addn: CN=John Doe,OU=Users,DC=xxx,DC=abc ,DC=com
dn: cn=Jane Doe,ou=employee,o=abc,c=AN
telephonenumber: +44 1293 112233
telephonenumber: +44 1293 112244 (SINet)
telephonenumber: +44 1293 112244
addn: CN=Jane Doe,OU=Users,DC=xxx,DC=abc ,DC=com
dn: cn=IPT-GB0000-DP2,ou=role, O=abc,C=AN
telephonenumber: +44 1293 555555
telephonenumber: +44 1293 333333
telephonenumber: +44 1293 444444
addn: CN=IPT-GB0000-DP2,CN=Users ,DC=xxx,DC =slb,DC=co m
dn: cn=IPT-GB8888-DP3,ou=role, O=abc,C=AN
telephonenumber: +44 1293 777777
telephonenumber: +44 1293 999999 (SINet)
telephonenumber: +44 1293 000000
addn: CN=IPT-GB8888-DP3,CN=Users ,DC=xxx,DC =abc,DC=co m
__________________________ __________ __________ __________ __________ __________ ____
for each group in the file I need to print out the:
addn:
telephonenumber:
The problem I have is that I need to only print out one telephone number for each user.
If the user has multiple phone numbers then I need to take the line that contains (SINet) to use for the telephone number and if it does not contain (SINet) in any of the telephone numbers then I need to use the first line of the telephone numbers for that user.
So for these 4 examples I would get output such as:
addn: CN=John Doe,OU=Users,DC=xxx,DC=abc ,DC=com
telephonenumber: +1 432 111 2222
addn: CN=Jane Doe,OU=Users,DC=xxx,DC=abc ,DC=com
telephonenumber: +44 1293 112244 (SINet)
addn: CN=IPT-GB0000-DP2,CN=Users ,DC=xxx,DC =slb,DC=co m
telephonenumber: +44 1293 555555
addn: CN=IPT-GB8888-DP3,CN=Users ,DC=xxx,DC =abc,DC=co m
telephonenumber: +44 1293 999999 (SINet)
The script I made is printing out the addn and phone number but always ends up with the first phone number where if there is a phone number with a tag of (SINet) I need to use that one, if not then the first line is needed.
Thanks for any help on this!!
__________________________
dn: cn=John Doe,ou=employee,o=abc,c=AN
telephonenumber: +1 432 111 2222
addn: CN=John Doe,OU=Users,DC=xxx,DC=abc
dn: cn=Jane Doe,ou=employee,o=abc,c=AN
telephonenumber: +44 1293 112233
telephonenumber: +44 1293 112244 (SINet)
telephonenumber: +44 1293 112244
addn: CN=Jane Doe,OU=Users,DC=xxx,DC=abc
dn: cn=IPT-GB0000-DP2,ou=role,
telephonenumber: +44 1293 555555
telephonenumber: +44 1293 333333
telephonenumber: +44 1293 444444
addn: CN=IPT-GB0000-DP2,CN=Users
dn: cn=IPT-GB8888-DP3,ou=role,
telephonenumber: +44 1293 777777
telephonenumber: +44 1293 999999 (SINet)
telephonenumber: +44 1293 000000
addn: CN=IPT-GB8888-DP3,CN=Users
__________________________
for each group in the file I need to print out the:
addn:
telephonenumber:
The problem I have is that I need to only print out one telephone number for each user.
If the user has multiple phone numbers then I need to take the line that contains (SINet) to use for the telephone number and if it does not contain (SINet) in any of the telephone numbers then I need to use the first line of the telephone numbers for that user.
So for these 4 examples I would get output such as:
addn: CN=John Doe,OU=Users,DC=xxx,DC=abc
telephonenumber: +1 432 111 2222
addn: CN=Jane Doe,OU=Users,DC=xxx,DC=abc
telephonenumber: +44 1293 112244 (SINet)
addn: CN=IPT-GB0000-DP2,CN=Users
telephonenumber: +44 1293 555555
addn: CN=IPT-GB8888-DP3,CN=Users
telephonenumber: +44 1293 999999 (SINet)
The script I made is printing out the addn and phone number but always ends up with the first phone number where if there is a phone number with a tag of (SINet) I need to use that one, if not then the first line is needed.
Thanks for any help on this!!
ASKER CERTIFIED SOLUTION
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
ASKER
ozo,
One other question on that, it works great but I need to put the telephonenumber and the addn into a variable as I need to do several other things to it, but from the print you have I cannot get that right.
How can I store the addn and telephonenumber to a variable rather than just printing it?
Thanks,
One other question on that, it works great but I need to put the telephonenumber and the addn into a variable as I need to do several other things to it, but from the print you have I cannot get that right.
How can I store the addn and telephonenumber to a variable rather than just printing it?
Thanks,
($addn)=/\b(addn:.*)/;
($telephonenumber)=(/(tele phonenumbe r:.*\(SINe t\).*)/)[0 ]||/(telep honenumber :.*)/;
($telephonenumber)=(/(tele
ASKER
Thanks ozo, I found a slightly different way to do it but that looks even better.
Thanks!!!
Thanks!!!
ASKER
That sure works for that, still have a numbers of things to work out but that is a big help on that part.
Thanks!!!