1*219b2ee8SDavid du Colombier# when raw index has a lot of entries like 2*219b2ee8SDavid du Colombier# 1578324 problematico, a, ci, che 3*219b2ee8SDavid du Colombier# apply this algorithm: 4*219b2ee8SDavid du Colombier# treat things after comma as suffixes 5*219b2ee8SDavid du Colombier# for each suffix: 6*219b2ee8SDavid du Colombier# if single letter, replace last letter 7*219b2ee8SDavid du Colombier# else search backwards for beginning of suffix 8*219b2ee8SDavid du Colombier# and if it leads to an old suffix of approximately 9*219b2ee8SDavid du Colombier# the same length, put replace that suffix 10*219b2ee8SDavid du Colombier# This will still leave some commas to fix by hand 11*219b2ee8SDavid du Colombier# Usage: awk -F' ' -f comfix.awk rawindex > newrawindex 12*219b2ee8SDavid du Colombier 13*219b2ee8SDavid du ColombierNF == 2 { 14*219b2ee8SDavid du Colombier i = index($2, ",") 15*219b2ee8SDavid du Colombier if(i == 0 || length($2) == 0) 16*219b2ee8SDavid du Colombier print $0 17*219b2ee8SDavid du Colombier else { 18*219b2ee8SDavid du Colombier n = split($2, a, /,[ ]*/) 19*219b2ee8SDavid du Colombier w = a[1] 20*219b2ee8SDavid du Colombier printf "%s\t%s\n", $1, w 21*219b2ee8SDavid du Colombier for(i = 2; i <= n; i++) { 22*219b2ee8SDavid du Colombier suf = a[i] 23*219b2ee8SDavid du Colombier m = matchsuflen(w, suf) 24*219b2ee8SDavid du Colombier if(m) { 25*219b2ee8SDavid du Colombier nw = substr(w, 1, length(w)-m) suf 26*219b2ee8SDavid du Colombier printf "%s\t%s\n", $1, nw 27*219b2ee8SDavid du Colombier } else 28*219b2ee8SDavid du Colombier printf "%s\t%s\n", $1, w ", " suf 29*219b2ee8SDavid du Colombier } 30*219b2ee8SDavid du Colombier } 31*219b2ee8SDavid du Colombier } 32*219b2ee8SDavid du ColombierNF != 2 { 33*219b2ee8SDavid du Colombier print $0 34*219b2ee8SDavid du Colombier } 35*219b2ee8SDavid du Colombier 36*219b2ee8SDavid du Colombierfunction matchsuflen(w, suf, wlen,suflen,c,pat,k,d) 37*219b2ee8SDavid du Colombier{ 38*219b2ee8SDavid du Colombier wlen = length(w) 39*219b2ee8SDavid du Colombier suflen = length(suf) 40*219b2ee8SDavid du Colombier if(suflen == 1) 41*219b2ee8SDavid du Colombier return 1 42*219b2ee8SDavid du Colombier else { 43*219b2ee8SDavid du Colombier c = substr(suf, 1, 1) 44*219b2ee8SDavid du Colombier for (k = 1; k <= wlen ; k++) 45*219b2ee8SDavid du Colombier if(substr(w, wlen-k+1, 1) == c) 46*219b2ee8SDavid du Colombier break 47*219b2ee8SDavid du Colombier if(k > wlen) 48*219b2ee8SDavid du Colombier return 0 49*219b2ee8SDavid du Colombier d = k-suflen 50*219b2ee8SDavid du Colombier if(d < 0) 51*219b2ee8SDavid du Colombier d = -d 52*219b2ee8SDavid du Colombier if(d > 3) 53*219b2ee8SDavid du Colombier return 0 54*219b2ee8SDavid du Colombier return k 55*219b2ee8SDavid du Colombier } 56*219b2ee8SDavid du Colombier} 57