Blame awklib/eg/prog/translate.awk

Packit 575503
# translate.awk --- do tr-like stuff
Packit 575503
#
Packit 575503
# Arnold Robbins, arnold@skeeve.com, Public Domain
Packit 575503
# August 1989
Packit 575503
# February 2009 - bug fix
Packit 575503
Packit 575503
# Bugs: does not handle things like tr A-Z a-z; it has
Packit 575503
# to be spelled out. However, if `to' is shorter than `from',
Packit 575503
# the last character in `to' is used for the rest of `from'.
Packit 575503
Packit 575503
function stranslate(from, to, target,     lf, lt, ltarget, t_ar, i, c,
Packit 575503
                                                               result)
Packit 575503
{
Packit 575503
    lf = length(from)
Packit 575503
    lt = length(to)
Packit 575503
    ltarget = length(target)
Packit 575503
    for (i = 1; i <= lt; i++)
Packit 575503
        t_ar[substr(from, i, 1)] = substr(to, i, 1)
Packit 575503
    if (lt < lf)
Packit 575503
        for (; i <= lf; i++)
Packit 575503
            t_ar[substr(from, i, 1)] = substr(to, lt, 1)
Packit 575503
    for (i = 1; i <= ltarget; i++) {
Packit 575503
        c = substr(target, i, 1)
Packit 575503
        if (c in t_ar)
Packit 575503
            c = t_ar[c]
Packit 575503
        result = result c
Packit 575503
    }
Packit 575503
    return result
Packit 575503
}
Packit 575503
Packit 575503
function translate(from, to)
Packit 575503
{
Packit 575503
    return $0 = stranslate(from, to, $0)
Packit 575503
}
Packit 575503
Packit 575503
# main program
Packit 575503
BEGIN {
Packit 575503
    if (ARGC < 3) {
Packit 575503
        print "usage: translate from to" > "/dev/stderr"
Packit 575503
        exit
Packit 575503
    }
Packit 575503
    FROM = ARGV[1]
Packit 575503
    TO = ARGV[2]
Packit 575503
    ARGC = 2
Packit 575503
    ARGV[1] = "-"
Packit 575503
}
Packit 575503
Packit 575503
{
Packit 575503
    translate(FROM, TO)
Packit 575503
    print
Packit 575503
}