annotate tools/filters/sorter.py @ 1:cdcb0ce84a1b

Uploaded
author xuebing
date Fri, 09 Mar 2012 19:45:15 -0500
parents 9071e359b9a3
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
1 """
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
2 Sorts tabular data on one or more columns.
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
3
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
4 usage: %prog [options]
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
5 -i, --input=i: Tabular file to be sorted
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
6 -o, --out_file1=o: Sorted output file
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
7 -c, --column=c: First column to sort on
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
8 -s, --style=s: Sort style (numerical or alphabetical)
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
9 -r, --order=r: Order (ASC or DESC)
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
10
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
11 usage: %prog input out_file1 column style order [column style ...]
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
12 """
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
13
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
14 import os, re, string, sys
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
15 from galaxy import eggs
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
16 import pkg_resources; pkg_resources.require( "bx-python" )
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
17 from bx.cookbook import doc_optparse
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
18
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
19 def stop_err( msg ):
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
20 sys.stderr.write( "%s\n" % msg )
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
21 sys.exit()
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
22
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
23 def main():
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
24 #Parse Command Line
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
25 options, args = doc_optparse.parse( __doc__ )
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
26 try:
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
27 inputfile = options.input
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
28 outputfile = '-o %s' % options.out_file1
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
29 columns = [options.column]
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
30 styles = [('','n')[options.style == 'num']]
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
31 orders = [('','r')[options.order == 'DESC']]
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
32 col_style_orders = sys.argv[6:]
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
33 if len(col_style_orders) > 1:
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
34 columns.extend([col_style_orders[i] for i in range(0,len(col_style_orders),3)])
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
35 styles.extend([('','n')[col_style_orders[i] == 'num'] for i in range(1,len(col_style_orders),3)])
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
36 orders.extend([('','r')[col_style_orders[i] == 'DESC'] for i in range(2,len(col_style_orders),3)])
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
37 cols = [ '-k%s,%s%s%s'%(columns[i], columns[i], styles[i], orders[i]) for i in range(len(columns)) ]
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
38 except Exception, ex:
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
39 stop_err('Error parsing input parameters\n' + str(ex))
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
40
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
41 # Launch sort.
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
42 cmd = "sort -f -t ' ' %s %s %s" % (' '.join(cols), outputfile, inputfile)
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
43 try:
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
44 os.system(cmd)
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
45 except Exception, ex:
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
46 stop_err('Error running sort command\n' + str(ex))
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
47
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
48 if __name__ == "__main__":
9071e359b9a3 Uploaded
xuebing
parents:
diff changeset
49 main()