#!/usr/bin/nawk -f #!/usr/local/bin/gawk -f # $Id: msatext,v 1.2 1991/10/28 22:15:48 schwartz Exp $ func usage() { print "usage: msatext [width=nn] seqdesc alignfile"; error=1; exit(1); } func extract_seqinfo(fname, f, n) { if (fname != "") { n = 0; while (getline ", "", f[1]); sub("-", " ", f[3]); # XXX - assumes positive numbers sub("-", " ", f[5]); ++n split(f[3], bounds); seqname[n] = f[1]; seqstart[n] = bounds[1]; seqend[n] = bounds[2]; } } close(fname); } } func write_text (from, len, out, newidx) { for (n=1; n<=nseq; ++n) { if (seqidx[n]==0) seqidx[n] = seqstart[n]; } for (n=1; n<=nseq; ++n) { out[n] = substr(catseq[n], from, len); gapstr = out[n]; gsub("[^-]", "", gapstr); gap = length(gapstr); if (DEBUG==1) { print seqidx[n] "\t" out[n] "\t" seqidx[n]+len-1 "\t" \ seqidx[n]+len+gap-1; } newidx[n] = seqidx[n] + length(out[n]) - gap; printf "%7d %s %-7d %s\n", seqidx[n], out[n], newidx[n]-1, seqname[n]; } print ""; for (n=1; n<=nseq; ++n) seqidx[n] = newidx[n]; return len; } BEGIN { if (ARGC==1) { usage(); } if (ARGC>2) { seq_file = ARGV[1]; delete ARGV[1]; } if (width == "") width = 50; # globals error=0; # usage inoma=0; # looking at optimal mult align section nseq=0; # number of sequences accumulated n=0; # scratch catseq[0]=""; # catenated lines of sequence fragments seqidx[0]=0; # running index into each sequence seqname[0]=""; # info from sequence file seqstart[0]=0; # seqend[0]=0; # seq[0]=""; # partial lines } (inoma==0) && ($0 ~ /[ \t]*\*\*\*[ \t]*Optimal Multiple Alignment/) {inoma=1;} (inoma==1) && ($0 ~ /^[-A-Z]+$/) { if (DEBUG==1) print "@ " $0; ++n; seq[n] = $0; } (inoma==1) && ($0 ~ /^$/) { if (DEBUG==1) print "catenate"; if (nseq==0) { nseq = n; } for(i=1; i<=n; ++i) { catseq[i] = catseq[i] seq[i]; } n=0; } END { if (error==0) { for(i=1; i<=n; ++i) { catseq[i] = catseq[i] seq[i]; } if (DEBUG==1) print "cat: " if (DEBUG==1) for(i=1; i<=nseq; ++i) { print catseq[i]; } extract_seqinfo(seq_file); if (DEBUG==1) print "blocks: " i = 1; while (i <= length(catseq[1])) { i = i + write_text(i,width); } } }