| .TH SORT 1 |
| .SH NAME |
| sort \- sort and/or merge files |
| .SH SYNOPSIS |
| .B sort |
| [ |
| .BI -cmuMbdf\&inrwt x |
| ] |
| [ |
| .BI + pos1 |
| [ |
| .BI - pos2 |
| ] ... |
| ] ... |
| [ |
| .B -k |
| .I pos1 |
| [ |
| .I ,pos2 |
| ] |
| ] ... |
| .br |
| \h'0.5in' |
| [ |
| .B -o |
| .I output |
| ] |
| [ |
| .B -T |
| .I dir |
| \&... |
| ] |
| [ |
| .I option |
| \&... |
| ] |
| [ |
| .I file |
| \&... |
| ] |
| .SH DESCRIPTION |
| .I Sort\^ |
| sorts |
| lines of all the |
| .I files |
| together and writes the result on |
| the standard output. |
| If no input files are named, the standard input is sorted. |
| .PP |
| The default sort key is an entire line. |
| Default ordering is |
| lexicographic by runes. |
| The ordering is affected globally by the following options, |
| one or more of which may appear. |
| .TP |
| .B -M |
| Compare as months. |
| The first three |
| non-white space characters |
| of the field |
| are folded |
| to upper case |
| and compared |
| so that |
| .L JAN |
| precedes |
| .LR FEB , |
| etc. |
| Invalid fields |
| compare low to |
| .LR JAN . |
| .TP |
| .B -b |
| Ignore leading white space (spaces and tabs) in field comparisons. |
| .TP |
| .B -d |
| `Phone directory' order: |
| only letters, |
| accented letters, |
| digits and white space |
| are significant in comparisons. |
| .TP |
| .B -f |
| Fold lower case |
| letters onto upper case. |
| Accented characters are folded to their |
| non-accented upper case form. |
| .TP |
| .B -i |
| Ignore characters outside the |
| .SM ASCII |
| range 040-0176 |
| in non-numeric comparisons. |
| .TP |
| .B -w |
| Like |
| .BR -i , |
| but ignore only tabs and spaces. |
| .TP |
| .B -n |
| An initial numeric string, |
| consisting of optional white space, |
| optional plus or minus sign, |
| and zero or more digits with optional decimal point, |
| is sorted by arithmetic value. |
| .TP |
| .B -g |
| Numbers, like |
| .B -n |
| but with optional |
| .BR e -style |
| exponents, are sorted by value. |
| .TP |
| .B -r |
| Reverse the sense of comparisons. |
| .TP |
| .BI -t x\^ |
| `Tab character' separating fields is |
| .IR x . |
| .PP |
| The notation |
| .BI + "pos1\| " - pos2\^ |
| restricts a sort key to a field beginning at |
| .I pos1\^ |
| and ending just before |
| .IR pos2 . |
| .I Pos1\^ |
| and |
| .I pos2\^ |
| each have the form |
| .IB m . n\f1, |
| optionally followed by one or more of the flags |
| .BR Mbdfginr , |
| where |
| .I m\^ |
| tells a number of fields to skip from the beginning of the line and |
| .I n\^ |
| tells a number of characters to skip further. |
| If any flags are present they override all the global |
| ordering options for this key. |
| A missing |
| .BI \&. n\^ |
| means |
| .BR \&.0 ; |
| a missing |
| .BI - pos2\^ |
| means the end of the line. |
| Under the |
| .BI -t x\^ |
| option, fields are strings separated by |
| .IR x ; |
| otherwise fields are |
| non-empty strings separated by white space. |
| White space before a field |
| is part of the field, except under option |
| .BR -b . |
| A |
| .B b |
| flag may be attached independently to |
| .IR pos1 |
| and |
| .IR pos2. |
| .PP |
| The notation |
| .B -k |
| .IR pos1 [, pos2 ] |
| is how POSIX |
| .I sort |
| defines fields: |
| .I pos1 |
| and |
| .I pos2 |
| have the same format but different meanings. |
| The value of |
| .I m\^ |
| is origin 1 instead of origin 0 |
| and a missing |
| .BI \&. n\^ |
| in |
| .I pos2 |
| is the end of the field. |
| .PP |
| When there are multiple sort keys, later keys |
| are compared only after all earlier keys |
| compare equal. |
| Lines that otherwise compare equal are ordered |
| with all bytes significant. |
| .PP |
| These option arguments are also understood: |
| .TP \w'\fL-z\fIrecsize\fLXX'u |
| .B -c |
| Check that the single input file is sorted according to the ordering rules; |
| give no output unless the file is out of sort. |
| .TP |
| .B -m |
| Merge; assume the input files are already sorted. |
| .TP |
| .B -u |
| Suppress all but one in each |
| set of equal lines. |
| Ignored bytes |
| and bytes outside keys |
| do not participate in |
| this comparison. |
| .TP |
| .B -o |
| The next argument is the name of an output file |
| to use instead of the standard output. |
| This file may be the same as one of the inputs. |
| .TP |
| .BI -T dir |
| Put temporary files in |
| .I dir |
| rather than in |
| .BR /var/tmp . |
| .ne 4 |
| .SH EXAMPLES |
| .TP |
| .L sort -u +0f +0 list |
| Print in alphabetical order all the unique spellings |
| in a list of words |
| where capitalized words differ from uncapitalized. |
| .TP |
| .L sort -t: +1 /adm/users |
| Print the users file |
| sorted by user name |
| (the second colon-separated field). |
| .TP |
| .L sort -umM dates |
| Print the first instance of each month in an already sorted file. |
| Options |
| .B -um |
| with just one input file make the choice of a |
| unique representative from a set of equal lines predictable. |
| .TP |
| .L |
| grep -n '^' input | sort -t: +1f +0n | sed 's/[0-9]*://' |
| A stable sort: input lines that compare equal will |
| come out in their original order. |
| .SH FILES |
| .BI /var/tmp/sort. <pid>.<ordinal> |
| .SH SOURCE |
| .B \*9/src/cmd/sort.c |
| .SH SEE ALSO |
| .IR uniq (1), |
| .IR look (1) |
| .SH DIAGNOSTICS |
| .I Sort |
| comments and exits with non-null status for various trouble |
| conditions and for disorder discovered under option |
| .BR -c . |
| .SH BUGS |
| An external null character can be confused |
| with an internally generated end-of-field character. |
| The result can make a sub-field not sort |
| less than a longer field. |
| .PP |
| Some of the options, e.g. |
| .B -i |
| and |
| .BR -M , |
| are hopelessly provincial. |