deroman (576B)
1 awk ' # deroman 2 # Input: string (tab) [arab or roman] 3 # Output: string (tab) [arab] 4 5 # Roman numeral n is replaced by arab n-1000 (e.g., iii -> -997) 6 BEGIN { FS = OFS = "\t" 7 # set a["i"] = 1, a["ii"] = 2, ... 8 s = "i ii iii iv v vi vii viii ix x" 9 s = s " xi xii xiii xiv xv xvi xvii xviii xix xx" 10 s = s " xxi xxii xxiii xxiv xxv xxvi xxvii xxviii xxix xxx" 11 n = split(s, b, " ") 12 for (i = 1; i <= n; i++) a[b[i]] = i 13 } 14 $2~/^[ivxlc]+$/ { if ($2 in a) $2 = -1000 + a[$2] 15 else print "deroman: bad number: " $0 | "cat 1>&2" 16 } 17 { print } 18 ' $*