/tools/filters/sorter.py
https://bitbucket.org/h_morita_dbcls/galaxy-central · Python · 49 lines · 30 code · 5 blank · 14 comment · 10 complexity · b5e9e30e84c8970f8eae2c4f9933d386 MD5 · raw file
- """
- 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 $'\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()