annotate sort.xml @ 0:ec66f9d90ef0 draft

initial uploaded
author bgruening
date Thu, 05 Sep 2013 04:58:21 -0400
parents
children a4ad586d1403
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
1 <tool id="unixtools_sort_header_tool" name="Sort" version="0.1.1">
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
2 <requirements>
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
3 <requirement type="package" version="8.21">gnu_coreutils</requirement>
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
4 <requirement type="package" version="4.2.2-sandbox">gnu_sed</requirement>
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
5 </requirements>
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
6 <command interpreter="sh">
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
7 #if int($header) > 0:
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
8 (sed -u '${header}'q &amp;&amp; sort $unique $ignore_case --stable -t ' '
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
9
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
10 #for $key in $sortkeys
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
11 '-k ${key.column}${key.order}${key.style},${key.column}'
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
12 #end for
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
13
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
14 ) &lt; '${infile}' &gt; '${outfile}'
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
15 #else:
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
16 (sort $unique $ignore_case --stable -t ' '
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
17
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
18 #for $key in $sortkeys
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
19 '-k ${key.column}${key.order}${key.style},${key.column}'
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
20 #end for
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
21
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
22 ) &lt; '${infile}' &gt; '${outfile}'
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
23 #end if
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
24 </command>
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
25
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
26 <inputs>
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
27 <param format="txt" name="infile" type="data" label="Sort Query" />
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
28 <param name="header" type="integer" size="5" value="1" label="Number of header lines" help="These will be ignored during sort.">
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
29 <validator type="in_range" message="Negative values are not allowed." min="0"/>
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
30 </param>
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
31
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
32 <param name="unique" type="boolean" checked="false" truevalue="--unique" falsevalue=""
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
33 label="Output unique values" help="Print only unique values (based on sorted key columns. See help section for details." />
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
34
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
35 <param name="ignore_case" type="boolean" checked="false" truevalue="-i" falsevalue="" label="Ignore case" help="Sort and Join key column values regardless of upper/lower case letters." />
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
36
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
37 <repeat name="sortkeys" title="sort key">
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
38 <param name="column" label="on column" type="data_column" data_ref="infile" accept_default="true" />
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
39 <param name="order" type="select" display="radio" label="in">
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
40 <option value="">Ascending order</option>
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
41 <option value="r">Descending order</option>
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
42 </param>
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
43 <param name="style" type="select" display="radio" label="Flavor">
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
44 <option value="n">Fast numeric sort ([-n])</option>
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
45 <option value="g">General numeric sort ( scientific notation [-g])</option>
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
46 <option value="V">Natural/Version sort ([-V]) </option>
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
47 <option value="">Alphabetical sort</option>
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
48 <option value="h">Human-readable numbers (-h)</option>
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
49 <option value="R">Random order</option>
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
50 </param>
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
51 </repeat>
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
52 </inputs>
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
53 <tests>
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
54 </tests>
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
55 <outputs>
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
56 <data format="input" name="outfile" metadata_source="infile"/>
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
57 </outputs>
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
58 <help>
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
59
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
60 **What it does**
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
61
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
62 This tool sorts an input file.
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
63
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
64 -----
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
65
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
66 **Sorting Styles**
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
67
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
68 * **Fast Numeric**: sort by numeric values. Handles integer values (e.g. 43, 134) and decimal-point values (e.g. 3.14). *Does not* handle scientific notation (e.g. -2.32e2).
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
69 * **General Numeric**: sort by numeric values. Handles all numeric notations (including scientific notation). Slower than *fast numeric*, so use only when necessary.
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
70 * **Natural Sort**: Sort in 'natural' order (natural to humans, not to computers). See example below.
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
71 * **Alphabetical sort**: Sort in strict alphabetical order. See example below.
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
72 * **Human-readable numbers**: Sort human readble numbers (e.g. 1G > 2M > 3K > 400)
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
73 * **Random order**: return lines in random order.
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
74
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
75 ------
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
76
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
77 **Example - Header line**
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
78
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
79 **Input file** (note first line is a header line, should not be sorted)::
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
80
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
81 Fruit Color Price
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
82 Banana Yellow 4.1
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
83 Avocado Green 8.0
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
84 Apple Red 3.0
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
85 Melon Green 6.1
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
86
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
87 **Sorting** by **numeric order** on column **3**, with **header**, will return::
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
88
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
89 Fruit Color Price
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
90 Apple Red 3.0
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
91 Banana Yellow 4.1
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
92 Melon Green 6.1
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
93 Avocado Green 8.0
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
94
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
95
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
96 -----
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
97
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
98 **Example - Natural vs. Alphabetical sorting**
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
99
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
100 Given the following list::
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
101
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
102 chr4
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
103 chr13
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
104 chr1
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
105 chr10
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
106 chr20
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
107 chr2
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
108
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
109 **Alphabetical sort** would produce the following sorted list::
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
110
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
111 chr1
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
112 chr10
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
113 chr13
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
114 chr2
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
115 chr20
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
116 chr4
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
117
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
118 **Natural Sort** would produce the following sorted list::
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
119
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
120 chr1
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
121 chr2
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
122 chr4
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
123 chr10
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
124 chr13
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
125 chr20
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
126
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
127
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
128 .. class:: infomark
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
129
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
130 If you're planning to use the file with another tool that expected sorted files (such as *join*), you should use the **Alphabetical sort**, not the **Natural Sort**. Natural sort order is easier for humans, but is unnatural for computer programs.
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
131
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
132 -----
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
133
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
134 *sort-header* is was written by A. Gordon ( gordon at cshl dot edu )
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
135
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
136 </help>
ec66f9d90ef0 initial uploaded
bgruening
parents:
diff changeset
137 </tool>