# sortlines.sh Usage: sortlines.sh files >out # Eats a sequence # and prints lines in canonical order # If you download this from my web page, it is important to # use the SOURCE FILE. DON'T mouse it off the screen # because many of the characters will not be visible. # Call this file sortlines.sh (not sortlines.sh.txt) # Note to myself: remember to maintain the link # ln sortlines.sh /usr/njas/wwwfiles/sequences/sortlines.sh.txt # Jan 26 2000 # Comments improved Nov 04 2002 if [ "$#" -eq 0 ] then echo "Incorrect no of arguments. Usage: sortlines.sh file(s) >bigout " >& 2 echo "Eats sequences and prints lines in canonical order" >& 2 exit 1 fi # define directories, files, etc AWK=/bin/gawk # % lines used are ACDEFHIKNORSTUVWXYeopt # eat a sequence cat $* | $AWK ' # Sets p[%I]=1 if %I line is present, etc; seic=1 if S line "ends in comma" # Initiate the arrays etc BEGIN { p["%A"] = 0; p["%B"] = 0; p["%C"] = 0; p["%D"] = 0; p["%E"] = 0; p["%F"] = 0; p["%G"] = 0; p["%H"] = 0; p["%I"] = 0; p["%J"] = 0; p["%K"] = 0; p["%L"] = 0; p["%M"] = 0; p["%N"] = 0; p["%O"] = 0; p["%P"] = 0; p["%Q"] = 0; p["%R"] = 0; p["%S"] = 0; p["%T"] = 0; p["%U"] = 0; p["%V"] = 0; p["%W"] = 0; p["%X"] = 0; p["%Y"] = 0; p["%Z"] = 0; p["%a"] = 0; p["%b"] = 0; p["%c"] = 0; p["%d"] = 0; p["%e"] = 0; p["%f"] = 0; p["%g"] = 0; p["%h"] = 0; p["%i"] = 0; p["%j"] = 0; p["%k"] = 0; p["%l"] = 0; p["%m"] = 0; p["%n"] = 0; p["%o"] = 0; p["%p"] = 0; p["%q"] = 0; p["%r"] = 0; p["%s"] = 0; p["%t"] = 0; p["%u"] = 0; p["%v"] = 0; p["%w"] = 0; p["%x"] = 0; p["%y"] = 0; p["%z"] = 0; } # end of BEGIN stuff # AAAAA start of main program $1 == "%I" { # start section %I # now we have found a new %I line # so now is time to print previous sequence if any # PPPPPP the main print section if ( p["%I"] == 1 ) { # start print # print ID line printf("%s\n", line["%I", 1] ) # print %S if ( p["%S"] >= 1 ) printf("%s\n", line["%S", 1] ) for ( i = 2; i <= p["%S"]; i++ ) printf("%s\n", line["%S", i] ) # print %T if ( p["%T"] >= 1 ) printf("%s\n", line["%T", 1] ) for ( i = 2; i <= p["%T"]; i++ ) printf("%s\n", line["%T", i] ) # print %U if ( p["%U"] >= 1 ) printf("%s\n", line["%U", 1] ) for ( i = 2; i <= p["%U"]; i++ ) printf("%s\n", line["%U", i] ) # print %V if ( p["%V"] >= 1 ) printf("%s\n", line["%V", 1] ) for ( i = 2; i <= p["%V"]; i++ ) printf("%s\n", line["%V", i] ) # print %W if ( p["%W"] >= 1 ) printf("%s\n", line["%W", 1] ) for ( i = 2; i <= p["%V"]; i++ ) printf("%s\n", line["%W", i] ) # print %X if ( p["%X"] >= 1 ) printf("%s\n", line["%X", 1] ) for ( i = 2; i <= p["%X"]; i++ ) printf("%s\n", line["%X", i] ) # print %N line if ( p["%N"] >= 1 ) printf("%s\n", line["%N", 1] ) for ( i = 2; i <= p["%N"]; i++ ) printf("%s\n", line["%N", i] ) # print %Cs if ( p["%C"] >= 1 ) printf("%s\n", line["%C", 1] ) for ( i = 2; i <= p["%C"]; i++ ) printf("%s\n", line["%C", i] ) # Print %R line if ( p["%R"] >= 1 ) printf("%s\n", line["%R", 1] ) for ( i = 2; i <= p["%R"]; i++ ) printf("%s\n", line["%R", i] ) # print refs if ( p["%D"] >= 1 ) printf("%s\n", line["%D", 1] ) for ( i = 2; i <= p["%D"]; i++ ) printf("%s\n", line["%D", i] ) # print %Hs if ( p["%H"] >= 1 ) printf("%s\n", line["%H", 1] ) for ( i = 2; i <= p["%H"]; i++ ) printf("%s\n", line["%H", i] ) # print %Fs if ( p["%F"] >= 1 ) printf("%s\n", line["%F", 1] ) for ( i = 2; i <= p["%F"]; i++ ) printf("%s\n", line["%F", i] ) # print %es if ( p["%e"] >= 1 ) printf("%s\n", line["%e", 1] ) for ( i = 2; i <= p["%e"]; i++ ) printf("%s\n", line["%e", i] ) # print %ps if ( p["%p"] >= 1 ) printf("%s\n", line["%p", 1] ) for ( i = 2; i <= p["%p"]; i++ ) printf("%s\n", line["%p", i] ) # print %ts if ( p["%t"] >= 1 ) printf("%s\n", line["%t", 1] ) for ( i = 2; i <= p["%t"]; i++ ) printf("%s\n", line["%t", i] ) # print %os if ( p["%o"] >= 1 ) printf("%s\n", line["%o", 1] ) for ( i = 2; i <= p["%o"]; i++ ) printf("%s\n", line["%o", i] ) # print %Ys if ( p["%Y"] >= 1 ) printf("%s\n", line["%Y", 1] ) for ( i = 2; i <= p["%Y"]; i++ ) printf("%s\n", line["%Y", i] ) # print %Ks if ( p["%K"] >= 1 ) printf("%s\n", line["%K", 1] ) for ( i = 2; i <= p["%K"]; i++ ) printf("%s\n", line["%K", i] ) # Print %O line if ( p["%O"] == 1 ) printf("%s\n", line["%O", 1] ) # Print author line if ( p["%A"] >= 1 ) printf("%s\n", line["%A", 1] ) for ( i = 2; i <= p["%A"]; i++ ) printf("%s\n", line["%A", i] ) # Print %E line if ( p["%E"] >= 1 ) printf("%s\n", line["%E", 1] ) for ( i = 2; i <= p["%E"]; i++ ) printf("%s\n", line["%E", i] ) # print blank line printf("\n") } # end print # end of printing section # weve just printed the previous sequence, triggered by reading a %I line # reset p["%A"] = 0; p["%B"] = 0; p["%C"] = 0; p["%D"] = 0; p["%E"] = 0; p["%F"] = 0; p["%G"] = 0; p["%H"] = 0; p["%I"] = 1; # (because we had the %I line in hand) p["%J"] = 0; p["%K"] = 0; p["%L"] = 0; p["%M"] = 0; p["%N"] = 0; p["%O"] = 0; p["%P"] = 0; p["%Q"] = 0; p["%R"] = 0; p["%S"] = 0; p["%T"] = 0; p["%U"] = 0; p["%V"] = 0; p["%W"] = 0; p["%X"] = 0; p["%Y"] = 0; p["%Z"] = 0; p["%a"] = 0; p["%b"] = 0; p["%c"] = 0; p["%d"] = 0; p["%e"] = 0; p["%f"] = 0; p["%g"] = 0; p["%h"] = 0; p["%i"] = 0; p["%j"] = 0; p["%k"] = 0; p["%l"] = 0; p["%m"] = 0; p["%n"] = 0; p["%o"] = 0; p["%p"] = 0; p["%q"] = 0; p["%r"] = 0; p["%s"] = 0; p["%t"] = 0; p["%u"] = 0; p["%v"] = 0; p["%w"] = 0; p["%x"] = 0; p["%y"] = 0; p["%z"] = 0; seq = ""; signseq = ""; trig = 0; signtrig = 0; seic = 0; teic = 0; ueic = 0; # save %I line for new seq line[$1, 1 ] = $0 } # end section %I # end of %I line stuff # BBBBB # accept a %*-line but not a %I-line $1 ~ "%[^I]" { # start non-%I line p[$1]++ line[$1, p[$1]] = $0 } # end non-%I line END { # print final sequence # QQQQQQ the main print section if ( p["%I"] == 1 ) { # start print # print ID line printf("%s\n", line["%I", 1] ) # print %S if ( p["%S"] >= 1 ) printf("%s\n", line["%S", 1] ) for ( i = 2; i <= p["%S"]; i++ ) printf("%s\n", line["%S", i] ) # print %T if ( p["%T"] >= 1 ) printf("%s\n", line["%T", 1] ) for ( i = 2; i <= p["%T"]; i++ ) printf("%s\n", line["%T", i] ) # print %U if ( p["%U"] >= 1 ) printf("%s\n", line["%U", 1] ) for ( i = 2; i <= p["%U"]; i++ ) printf("%s\n", line["%U", i] ) # print %V if ( p["%V"] >= 1 ) printf("%s\n", line["%V", 1] ) for ( i = 2; i <= p["%V"]; i++ ) printf("%s\n", line["%V", i] ) # print %W if ( p["%W"] >= 1 ) printf("%s\n", line["%W", 1] ) for ( i = 2; i <= p["%V"]; i++ ) printf("%s\n", line["%W", i] ) # print %X if ( p["%X"] >= 1 ) printf("%s\n", line["%X", 1] ) for ( i = 2; i <= p["%X"]; i++ ) printf("%s\n", line["%X", i] ) # print %N line if ( p["%N"] >= 1 ) printf("%s\n", line["%N", 1] ) for ( i = 2; i <= p["%N"]; i++ ) printf("%s\n", line["%N", i] ) # print %Cs if ( p["%C"] >= 1 ) printf("%s\n", line["%C", 1] ) for ( i = 2; i <= p["%C"]; i++ ) printf("%s\n", line["%C", i] ) # Print %R line if ( p["%R"] >= 1 ) printf("%s\n", line["%R", 1] ) for ( i = 2; i <= p["%R"]; i++ ) printf("%s\n", line["%R", i] ) # print refs if ( p["%D"] >= 1 ) printf("%s\n", line["%D", 1] ) for ( i = 2; i <= p["%D"]; i++ ) printf("%s\n", line["%D", i] ) # print %Hs if ( p["%H"] >= 1 ) printf("%s\n", line["%H", 1] ) for ( i = 2; i <= p["%H"]; i++ ) printf("%s\n", line["%H", i] ) # print %Fs if ( p["%F"] >= 1 ) printf("%s\n", line["%F", 1] ) for ( i = 2; i <= p["%F"]; i++ ) printf("%s\n", line["%F", i] ) # print %es if ( p["%e"] >= 1 ) printf("%s\n", line["%e", 1] ) for ( i = 2; i <= p["%e"]; i++ ) printf("%s\n", line["%e", i] ) # print %ps if ( p["%p"] >= 1 ) printf("%s\n", line["%p", 1] ) for ( i = 2; i <= p["%p"]; i++ ) printf("%s\n", line["%p", i] ) # print %ts if ( p["%t"] >= 1 ) printf("%s\n", line["%t", 1] ) for ( i = 2; i <= p["%t"]; i++ ) printf("%s\n", line["%t", i] ) # print %os if ( p["%o"] >= 1 ) printf("%s\n", line["%o", 1] ) for ( i = 2; i <= p["%o"]; i++ ) printf("%s\n", line["%o", i] ) # print %Ys if ( p["%Y"] >= 1 ) printf("%s\n", line["%Y", 1] ) for ( i = 2; i <= p["%Y"]; i++ ) printf("%s\n", line["%Y", i] ) # print %Ks if ( p["%K"] >= 1 ) printf("%s\n", line["%K", 1] ) for ( i = 2; i <= p["%K"]; i++ ) printf("%s\n", line["%K", i] ) # Print %O line if ( p["%O"] == 1 ) printf("%s\n", line["%O", 1] ) # Print author line if ( p["%A"] >= 1 ) printf("%s\n", line["%A", 1] ) for ( i = 2; i <= p["%A"]; i++ ) printf("%s\n", line["%A", i] ) # Print %E line if ( p["%E"] >= 1 ) printf("%s\n", line["%E", 1] ) for ( i = 2; i <= p["%E"]; i++ ) printf("%s\n", line["%E", i] ) # print blank line printf("\n") } # end print # end of printing section }'