Go Premium for a chance to win a PS4. Enter to Win

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 500
  • Last Modified:

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=com

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=com
________________________________________________________________________________

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=com
telephonenumber: +44 1293 555555

addn: CN=IPT-GB8888-DP3,CN=Users,DC=xxx,DC=abc,DC=com
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!!
0
bt707
Asked:
bt707
  • 3
  • 2
1 Solution
 
ozoCommented:
$/="";
while( <DATA> ){
    print /\b(addn:.*\n)/,(/(telephonenumber:.*\(SINet\).*\n)/)[0]||/(telephonenumber:.*\n)/;
}
__DATA__
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=com

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=com
0
 
bt707Author Commented:
Thanks ozo,

That sure works for that, still have a numbers of things to work out but that is a big help on that part.

Thanks!!!
0
 
bt707Author Commented:
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,
0
 
ozoCommented:
($addn)=/\b(addn:.*)/;
($telephonenumber)=(/(telephonenumber:.*\(SINet\).*)/)[0]||/(telephonenumber:.*)/;
0
 
bt707Author Commented:
Thanks ozo, I found a slightly different way to do it but that looks even better.

Thanks!!!
0

Featured Post

New feature and membership benefit!

New feature! Upgrade and increase expert visibility of your issues with Priority Questions.

  • 3
  • 2
Tackle projects and never again get stuck behind a technical roadblock.
Join Now