home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 22 gnu / 22-gnu.zip / gnuawk.zip / awklib / eg / prog / translate.awk < prev    next >
Text File  |  1997-03-15  |  1KB  |  47 lines

  1. # translate --- do tr like stuff
  2. # Arnold Robbins, arnold@gnu.ai.mit.edu, Public Domain
  3. # August 1989
  4.  
  5. # bugs: does not handle things like: tr A-Z a-z, it has
  6. # to be spelled out. However, if `to' is shorter than `from',
  7. # the last character in `to' is used for the rest of `from'.
  8.  
  9. function stranslate(from, to, target,     lf, lt, t_ar, i, c)
  10. {
  11.     lf = length(from)
  12.     lt = length(to)
  13.     for (i = 1; i <= lt; i++)
  14.         t_ar[substr(from, i, 1)] = substr(to, i, 1)
  15.     if (lt < lf)
  16.         for (; i <= lf; i++)
  17.             t_ar[substr(from, i, 1)] = substr(to, lt, 1)
  18.     for (i = 1; i <= lf; i++) {
  19.         c = substr(from, i, 1)
  20.         if (index(target, c) > 0)
  21.             gsub(c, t_ar[c], target)
  22.     }
  23.     return target
  24. }
  25.  
  26. function translate(from, to)
  27. {
  28.     return $0 = stranslate(from, to, $0)
  29. }
  30.  
  31. # main program
  32. BEGIN {
  33.     if (ARGC < 3) {
  34.         print "usage: translate from to" > "/dev/stderr"
  35.         exit
  36.     }
  37.     FROM = ARGV[1]
  38.     TO = ARGV[2]
  39.     ARGC = 2
  40.     ARGV[1] = "-"
  41. }
  42.  
  43. {
  44.     translate(FROM, TO)
  45.     print
  46. }
  47.