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 |
}
|