Changing Upper and Lower Case

What is the command for changing the following:
KREMS|XXXX YYYY|HHHH|
YYYY UUUUU |YYYYYYYYY|IIIIII

Need to change it to:
Krems|Xxxxx Yxxx|Hhhh|
Yyyy Uuuuu |Yyyyyyyyy|Iiiiii

I have a large file with proper names that need to be converted to upper and lower case.

---

The following solution leaves each character as is that follows either start of line or space or bar character, and downshifts all the rest.
I leave the first character as is (rather than upshift) because you may want something like John deHavilland.  But if you do want to upshift all first characters, then remove the #.

awk '{\
newline=""
cap=1
for (i=1;i<=length;i++)
   {x=substr($0,i,1)
    if (x=="|" || x==" ")
       cap=1
    else
       if (cap==1)
          {#x=toupper(x)
           cap=0}
       else
          x=tolower(x)
    newline=newline x}
print newline
}' largefile

---

works fine except for if I have the following
18.yyyyyy-kkkkkk|

need it to be
18.Yyyyyy-Kkkkkk|

Any ideas on how to include these as well

---

Change the if-statement to:
if (x=="|" || x==" " || x=="." || x=="-")

and since you want to upshift (not just downshift), then take out the #.

Have a Unix Problem
Unix Forum - Do you have a UNIX Question?

Unix Books :-
UNIX Programming, Certification, System Administration, Performance Tuning Reference Books

Return to : - Unix System Administration Hints and Tips

(c) www.gotothings.com All material on this site is Copyright.
Every effort is made to ensure the content integrity.  Information used on this site is at your own risk.
All product names are trademarks of their respective companies.
The site www.gotothings.com is in no way affiliated with or endorsed by any company listed at this site.
Any unauthorised copying or mirroring is prohibited.