view tools/filters/sorter.py @ 0:9071e359b9a3

Uploaded
author xuebing
date Fri, 09 Mar 2012 19:37:19 -0500
parents
children
line wrap: on
line source

"""
Sorts tabular data on one or more columns.

usage: %prog [options]
   -i, --input=i: Tabular file to be sorted
   -o, --out_file1=o: Sorted output file
   -c, --column=c: First column to sort on
   -s, --style=s: Sort style (numerical or alphabetical)
   -r, --order=r: Order (ASC or DESC)

usage: %prog input out_file1 column style order [column style ...]
"""

import os, re, string, sys
from galaxy import eggs
import pkg_resources; pkg_resources.require( "bx-python" )
from bx.cookbook import doc_optparse

def stop_err( msg ):
    sys.stderr.write( "%s\n" % msg )
    sys.exit()

def main():
    #Parse Command Line
    options, args = doc_optparse.parse( __doc__ )
    try:
        inputfile = options.input
        outputfile = '-o %s' % options.out_file1
        columns = [options.column]
        styles = [('','n')[options.style == 'num']]
        orders = [('','r')[options.order == 'DESC']]
        col_style_orders = sys.argv[6:]
        if len(col_style_orders) > 1:
            columns.extend([col_style_orders[i] for i in range(0,len(col_style_orders),3)])
            styles.extend([('','n')[col_style_orders[i] == 'num'] for i in range(1,len(col_style_orders),3)])
            orders.extend([('','r')[col_style_orders[i] == 'DESC'] for i in range(2,len(col_style_orders),3)])
        cols = [ '-k%s,%s%s%s'%(columns[i], columns[i], styles[i], orders[i]) for i in range(len(columns)) ]
    except Exception, ex:
        stop_err('Error parsing input parameters\n' + str(ex))

    # Launch sort.
    cmd = "sort -f -t '	' %s %s %s" % (' '.join(cols), outputfile, inputfile)
    try:
        os.system(cmd)
    except Exception, ex:
        stop_err('Error running sort command\n' + str(ex))

if __name__ == "__main__":
    main()