BEGIN {vr=""; ch=""} /^[0-9]*:[0-9]*$/ { split($0, chv, ":"); ch = chv[1]; vr = chv[2] ; next;} { word = $0; if (word in lastc) { if ( lastc[word] == ch ) { # same chapter if (vr == be[word]) { # print "same verse " ch ":" vr next; } else if (vr == be[word]+1) { # print "next verse " ch ":" vr be[word] = vr; } else { # print "new verse " ch ":" vr op(); lastc[word] = ch; bb[word] = vr; be[word] = vr; } } else { # new chapter # print "new chapter " ch ":" vr op(); bb[word] = be[word] = vr; newchap[word] = 1; lastc[word] = ch; } } else { # new word # print "new word " word conc[word] = chap; bb[word] = be[word] = vr; newchap[word] = 1; lastc[word] = ch; } } NR % 1024== 0 { print NR " records" >> "/dev/tty" } END { for ( word in conc ) { op(); print word, conc[word];} } function op() { { # output if (newchap[word]) { newchap[word] = 0; newstr = " " lastc[word] ":" } else { newstr = "," } if (bb[word] == be[word]) newstr = newstr be[word] else newstr = newstr bb[word] "-" be[word] # print "appending " newstr conc[word] = conc[word] newstr; } return ; }