These commands work with (or produce) sorted files.
sort
: Sort text files
sort
sorts, merges, or compares all the lines from the given
files, or standard input if none are given or for a file of
`-'. By default, sort
writes the results to standard
output. Synopsis:
sort [option]... [file]...
sort
has three modes of operation: sort (the default), merge,
and check for sortedness. The following options change the operation
mode:
A pair of lines is compared as follows: if any key fields have been
specified, sort
compares each pair of fields, in the order
specified on the command line, according to the associated ordering
options, until a difference is found or no fields are left.
Unless otherwise specified, all comparisons use the character
collating sequence specified by the @env{LC_COLLATE} locale.
If any of the global options `Mbdfinr' are given but no key fields
are specified, sort
compares the entire lines according to the
global options.
Finally, as a last resort when all keys compare equal (or if no
ordering options were specified at all), sort
compares the entire
lines. The last resort comparison
honors the `-r' global option. The `-s' (stable) option
disables this last-resort comparison so that lines in which all fields
compare equal are left in their original relative order. If no fields
or global options are specified, `-s' has no effect.
GNU sort
(as specified for all GNU utilities) has no limits on
input line length or restrictions on bytes allowed within lines. In
addition, if the final byte of an input file is not a newline, GNU
sort
silently supplies one. A line's trailing newline is part of
the line for comparison purposes; for example, with no options in an
ASCII locale, a line starting with a tab sorts before an empty line
because tab precedes newline in the ASCII collating sequence.
Upon any error, sort
exits with a status of `2'.
If the environment variable @env{TMPDIR} is set, sort
uses its
value as the directory for temporary files instead of `/tmp'. The
`-T tempdir' option in turn overrides the environment
variable.
The following options affect the ordering of output lines. They may be specified globally or as part of a specific key field. If no key fields are specified, global options apply to comparison of entire lines; otherwise the global options are inherited by key fields that do not specify any special options of their own. The `-b', `-d', `-f' and `-i' options classify characters according to the @env{LC_CTYPE} locale.
strtod
to convert
a prefix of each line to a double-precision floating point number.
This allows floating point numbers to be specified in scientific notation,
like 1.0e-34
and 10e100
.
Do not report overflow, underflow, or conversion errors.
Use the following collating sequence:
sort -n
uses what might be considered an unconventional method
to compare strings representing floating point numbers. Rather than
first converting each string to the C double
type and then
comparing those values, sort aligns the radix characters in the two
strings and compares the strings a character at a time. One benefit
of using this approach is its speed. In practice this is much more
efficient than performing the two corresponding string-to-double (or even
string-to-integer) conversions and then comparing doubles. In addition,
there is no corresponding loss of precision. Converting each string to
double
before comparison would limit precision to about 16 digits
on most systems.
Neither a leading `+' nor exponential notation is recognized.
To compare such strings numerically, use the `-g' option.
Other options are:
sort
copies
it to a temporary file before sorting and writing the output to
output-file.
sort
breaks it
into fields ` foo' and ` bar'. The field separator is
not considered to be part of either the field preceding or the field
following.
In addition, when GNU sort
is invoked with exactly one argument,
options `--help' and `--version' are recognized. See section 2. Common options.
Historical (BSD and System V) implementations of sort
have
differed in their interpretation of some options, particularly
`-b', `-f', and `-n'. GNU sort follows the POSIX
behavior, which is usually (but not always!) like the System V behavior.
According to POSIX, `-n' no longer implies `-b'. For
consistency, `-M' has been changed in the same way. This may
affect the meaning of character positions in field specifications in
obscure cases. The only fix is to add an explicit `-b'.
A position in a sort field specified with the `-k' or `+' option has the form `f.c', where f is the number of the field to use and c is the number of the first character from the beginning of the field (for `+pos') or from the end of the previous field (for `-pos'). If the `.c' is omitted, it is taken to be the first character in the field. If the `-b' option was specified, the `.c' part of a field specification is counted from the first nonblank character of the field (for `+pos') or from the first nonblank character following the previous field (for `-pos').
A sort key option may also have any of the option letters `Mbdfinr' appended to it, in which case the global ordering options are not used for that particular field. The `-b' option may be independently attached to either or both of the `+pos' and `-pos' parts of a field specification, and if it is inherited from the global options it will be attached to both. Keys may span multiple fields.
Here are some examples to illustrate various combinations of options. In them, the POSIX `-k' option is used to specify sort keys rather than the obsolete `+pos1-pos2' syntax.
sort -nrSort alphabetically, omitting the first and second fields. This uses a single key composed of the characters beginning at the start of field three and extending to the end of each line.
sort -k3
sort -t : -k 2,2n -k 5.3,5.4Note that if you had written `-k 2' instead of `-k 2,2' `sort' would have used all characters beginning in the second field and extending to the end of the line as the primary numeric key. For the large majority of applications, treating keys spanning more than one field as numeric will not do what you expect. Also note that the `n' modifier was applied to the field-end specifier for the first key. It would have been equivalent to specify `-k 2n,2' or `-k 2n,2n'. All modifiers except `b' apply to the associated field, regardless of whether the modifier character is attached to the field-start and/or the field-end part of the key specifier.
sort -t : -k 5b,5 -k 3,3n /etc/passwdAn alternative is to use the global numeric modifier `-n'.
sort -t : -n -k 5b,5 -k 3,3 /etc/passwd
find src -type f -print0 | sort -t / -z -f | xargs -0 etags --appendThe use of `-print0', `-z', and `-0' in this case mean that pathnames that contain Line Feed characters will not get broken up by the sort operation. Finally, to ignore both leading and trailing white space, you could have applied the `b' modifier to the field-end specifier for the first key,
sort -t : -n -k 5b,5b -k 3,3 /etc/passwdor by using the global `-b' modifier instead of `-n' and an explicit `n' with the second key specifier.
sort -t : -b -k 5,5 -k 3,3n /etc/passwd
uniq
: Uniquify files
uniq
writes the unique lines in the given `input', or
standard input if nothing is given or for an input name of
`-'. Synopsis:
uniq [option]... [input [output]]
By default, uniq
prints the unique lines in a sorted file, i.e.,
discards all but one of identical successive lines. Optionally, it can
instead show only lines that appear exactly once, or lines that appear
more than once.
The input must be sorted. If your input is not sorted, perhaps you want
to use sort -u
.
If no output file is specified, uniq
writes to standard
output.
The program accepts the following options. Also see section 2. Common options.
comm
: Compare two sorted files line by line
comm
writes to standard output lines that are common, and lines
that are unique, to two input files; a file name of `-' means
standard input. Synopsis:
comm [option]... file1 file2
Before comm
can be used, the input files must be sorted using the
collating sequence specified by the @env{LC_COLLATE} locale, with
trailing newlines significant. If an input file ends in a non-newline
character, a newline is silently appended. The sort
command with
no options always outputs a file that is suitable input to comm
.
With no options, comm
produces three column output. Column one
contains lines unique to file1, column two contains lines unique
to file2, and column three contains lines common to both files.
Columns are separated by a single TAB character.
The options `-1', `-2', and `-3' suppress printing of the corresponding columns. Also see section 2. Common options.
Unlike some other comparison utilities, comm
has an exit
status that does not depend on the result of the comparison.
Upon normal completion comm
produces an exit code of zero.
If there is an error it exits with nonzero status.
tsort
: Topological sort
tsort
performs a topological sort on the given file, or
standard input if no input file is given or for a file of
`-'. Synopsis:
tsort [option] [file]
tsort
reads its input as pairs of strings, separated by blanks,
indicating a partial ordering. The output is a total ordering that
corresponds to the given partial ordering.
For example
tsort <<EOF a b c d e f b c d e EOF
will produce the output
a b c d e f
tsort
will detect cycles in the input and writes the first cycle
encountered to standard error.
Note that for a given partial ordering, generally there is no unique total ordering.
The only options are `--help' and `--version'. See section 2. Common options.
ptx
: Produce permuted indexes
ptx
reads a text file and essentially produces a permuted index, with
each keyword in its context. The calling sketch is either one of:
ptx [option ...] [file ...] ptx -G [option ...] [input [output]]
The `-G' (or its equivalent: `--traditional') option disables
all GNU extensions and revert to traditional mode, thus introducing some
limitations, and changes several of the program's default option values.
When `-G' is not specified, GNU extensions are always enabled. GNU
extensions to ptx
are documented wherever appropriate in this
document. For the full list, see See section 7.5.5 The GNU extensions to ptx
.
Individual options are explained in incoming sections.
When GNU extensions are enabled, there may be zero, one or several file after the options. If there is no file, the program reads the standard input. If there is one or several file, they give the name of input files which are all read in turn, as if all the input files were concatenated. However, there is a full contextual break between each file and, when automatic referencing is requested, file names and line numbers refer to individual text input files. In all cases, the program produces the permuted index onto the standard output.
When GNU extensions are not enabled, that is, when the program
operates in traditional mode, there may be zero, one or two parameters
besides the options. If there is no parameters, the program reads the
standard input and produces the permuted index onto the standard output.
If there is only one parameter, it names the text input to be read
instead of the standard input. If two parameters are given, they give
respectively the name of the input file to read and the name of
the output file to produce. Be very careful to note that,
in this case, the contents of file given by the second parameter is
destroyed. This behaviour is dictated only by System V ptx
compatibility, because GNU Standards discourage output parameters not
introduced by an option.
Note that for any file named as the value of an option or as an input text file, a single dash - may be used, in which case standard input is assumed. However, it would not make sense to use this convention more than once per program invocation.
ptx
and switch to traditional mode.
As it is setup now, the program assumes that the input file is coded
using 8-bit ISO 8859-1 code, also known as Latin-1 character set,
unless if it is compiled for MS-DOS, in which case it uses the
character set of the IBM-PC. (GNU ptx
is not known to work on
smaller MS-DOS machines anymore.) Compared to 7-bit ASCII, the set of
characters which are letters is then different, this fact alters the
behaviour of regular expression matching. Thus, the default regular
expression for a keyword allows foreign or diacriticized letters.
Keyword sorting, however, is still crude; it obeys the underlying
character set ordering quite blindly.
ptx
when this option is
not specified, usually found in `/usr/local/lib/eign' if this has
not been changed at installation time. If you want to deactivate the
default Ignore file, specify /dev/null
instead.
[.?!][]\"')}]*\\($\\|\t\\| \\)[ \t\n]*Whenever GNU extensions are disabled or if `-r' option is used, end of lines are used; in this case, the default regexp is just:
\nUsing an empty regexp is equivalent to completely disabling end of line or end of sentence recognition. In this case, the whole file is considered to be a single big line or sentence. The user might want to disallow all truncation flag generation as well, through option `-F ""'. See section `Syntax of Regular Expressions' in The GNU Emacs Manual. When the keywords happen to be near the beginning of the input line or sentence, this often creates an unused area at the beginning of the output context line; when the keywords happen to be near the end of the input line or sentence, this often creates an unused area at the end of the output context line. The program tries to fill those unused areas by wrapping around context in them; the tail of the input line or sentence is used to fill the unused area on the left of the output line; the head of the input line or sentence is used to fill the unused area on the right of the output line. As a matter of convenience to the user, many usual backslashed escape sequences, as found in the C language, are recognized and converted to the corresponding characters by
ptx
itself.
ptx
itself.
Output format is mainly controlled by `-O' and `-T' options,
described in the table below. When neither `-O' nor `-T' is
selected, and if GNU extensions are enabled, the program choose an
output format suited for a dumb terminal. Each keyword occurrence is
output to the center of one line, surrounded by its left and right
contexts. Each field is properly justified, so the concordance output
could readily be observed. As a special feature, if automatic
references are selected by option `-A' and are output before the
left context, that is, if option `-R' is not selected, then
a colon is added after the reference; this nicely interfaces with GNU
Emacs next-error
processing. In this default output format, each
white space character, like newline and tab, is merely changed to
exactly one space, with no special attempt to compress consecutive
spaces. This might change in the future. Except for those white space
characters, every other character of the underlying set of 256
characters is transmitted verbatim.
Output format is further controlled by the following options.
ptx
itself.
nroff
, troff
or TeX.
nroff
or troff
processing. Each output line will look like:
.xx "tail" "before" "keyword_and_after" "head" "ref"so it will be possible to write an `.xx' roff macro to take care of the output typesetting. This is the default output format when GNU extensions are disabled. Option `-M' might be used to change `xx' to another macro name. In this output format, each non-graphical character, like newline and tab, is merely changed to exactly one space, with no special attempt to compress consecutive spaces. Each quote character: " is doubled so it will be correctly processed by
nroff
or troff
.
\xx {tail}{before}{keyword}{after}{head}{ref}so it will be possible to write a
\xx
definition to take care of
the output typesetting. Note that when references are not being
produced, that is, neither option `-A' nor option `-r' is
selected, the last parameter of each \xx
call is inhibited.
Option `-M' might be used to change `xx' to another macro
name.
In this output format, some special characters, like $, %,
&, # and _ are automatically protected with a
backslash. Curly brackets {, } are also protected with a
backslash, but also enclosed in a pair of dollar signs to force
mathematical mode. The backslash itself produces the sequence
\backslash{}
. Circumflex and tilde diacritics produce the
sequence ^\{ }
and ~\{ }
respectively. Other
diacriticized characters of the underlying character set produce an
appropriate TeX sequence as far as possible. The other non-graphical
characters, like newline and tab, and all others characters which are
not part of ASCII, are merely changed to exactly one space, with no
special attempt to compress consecutive spaces. Let me know how to
improve this special character processing for TeX.
ptx
This version of ptx
contains a few features which do not exist in
System V ptx
. These extra features are suppressed by using the
`-G' command line option, unless overridden by other command line
options. Some GNU extensions cannot be recovered by overriding, so the
simple rule is to avoid `-G' if you care about GNU extensions.
Here are the differences between this program and System V ptx
.
ptx
reads only one file and produce the result on standard output
or, if a second file parameter is given on the command, to that
file.
Having output parameters not introduced by options is a quite dangerous
practice which GNU avoids as far as possible. So, for using ptx
portably between GNU and System V, you should pay attention to always
use it with a single input file, and always expect the result on
standard output. You might also want to automatically configure in a
`-G' option to ptx
calls in products using ptx
, if
the configurator finds that the installed ptx
accepts `-G'.
ptx
are options `-b',
`-f', `-g', `-i', `-o', `-r', `-t' and
`-w'. All other options are GNU extensions and are not repeated in
this enumeration. Moreover, some options have a slightly different
meaning when GNU extensions are enabled, as explained below.
troff
or
nroff
. It is rather formatted for a dumb terminal. troff
or nroff
output may still be selected through option `-O'.
ptx
does not accept 8-bit characters, a few
control characters are rejected, and the tilde ~ is condemned.
ptx
processes only
the first 200 characters in each line.
ptx
,
but still, there are some slight disposition glitches this program does
not completely reproduce.
ptx
.
Go to the first, previous, next, last section, table of contents.