mirror of
git://git.sv.gnu.org/coreutils.git
synced 2026-07-29 03:50:45 +02:00
Document locale-specific changes to `sort',
as well as the new, POSIX-compliant definition of line comparison, and -g's more careful treatment of NaNs, infinities and zeros.
This commit is contained in:
+62
-34
@@ -44,7 +44,7 @@ START-INFO-DIR-ENTRY
|
||||
* tsort: (textutils)tsort invocation. Topological sort.
|
||||
* tr: (textutils)tr invocation. Translate characters.
|
||||
* unexpand: (textutils)unexpand invocation. Convert spaces to tabs.
|
||||
* uniq: (textutils)uniq invocation. Uniqify files.
|
||||
* uniq: (textutils)uniq invocation. Uniquify files.
|
||||
* wc: (textutils)wc invocation. Byte, word, and line counts.
|
||||
END-INFO-DIR-ENTRY
|
||||
@end format
|
||||
@@ -161,7 +161,7 @@ Summarizing files
|
||||
Operating on sorted files
|
||||
|
||||
* sort invocation:: Sort text files.
|
||||
* uniq invocation:: Uniqify files.
|
||||
* uniq invocation:: Uniquify files.
|
||||
* comm invocation:: Compare two sorted files line by line.
|
||||
* ptx invocation:: Produce a permuted index of file contents.
|
||||
* tsort invocation:: Topological sort.
|
||||
@@ -672,7 +672,7 @@ Output at most @var{bytes} bytes of the input. Prefixes and suffixes on
|
||||
@opindex --strings
|
||||
@cindex string constants, outputting
|
||||
Instead of the normal output, output only @dfn{string constants}: at
|
||||
least @var{n} (3 by default) consecutive ASCII graphic characters,
|
||||
least @var{n} (3 by default) consecutive @sc{ASCII} graphic characters,
|
||||
followed by a null (zero) byte.
|
||||
|
||||
@item -t @var{type}
|
||||
@@ -687,14 +687,14 @@ of each output line using each of the data types that you specified,
|
||||
in the order that you specified.
|
||||
|
||||
Adding a trailing ``z'' to any type specification appends a display
|
||||
of the ASCII character representation of the printable characters
|
||||
of the @sc{ASCII} character representation of the printable characters
|
||||
to the output line generated by the type specification.
|
||||
|
||||
@table @samp
|
||||
@item a
|
||||
named character,
|
||||
@item c
|
||||
ASCII character or backslash escape,
|
||||
@sc{ASCII} character or backslash escape,
|
||||
@item d
|
||||
signed decimal,
|
||||
@item f
|
||||
@@ -779,7 +779,7 @@ Output as octal bytes. Equivalent to @samp{-toC}.
|
||||
|
||||
@item -c
|
||||
@opindex -c
|
||||
Output as ASCII characters or backslash escapes. Equivalent to
|
||||
Output as @sc{ASCII} characters or backslash escapes. Equivalent to
|
||||
@samp{-tc}.
|
||||
|
||||
@item -d
|
||||
@@ -1998,7 +1998,7 @@ These commands work with (or produce) sorted files.
|
||||
|
||||
@menu
|
||||
* sort invocation:: Sort text files.
|
||||
* uniq invocation:: Uniqify files.
|
||||
* uniq invocation:: Uniquify files.
|
||||
* comm invocation:: Compare two sorted files line by line.
|
||||
* ptx invocation:: Produce a permuted index of file contents.
|
||||
* tsort invocation:: Topological sort.
|
||||
@@ -2043,18 +2043,21 @@ works.
|
||||
|
||||
@end table
|
||||
|
||||
@vindex LC_COLLATE
|
||||
A pair of lines is compared as follows: if any key fields have been
|
||||
specified, @code{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 @samp{Mbdfinr} are given but no key fields
|
||||
are specified, @code{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), @code{sort} compares the lines
|
||||
byte by byte in machine collating sequence. The last resort comparison
|
||||
ordering options were specified at all), @code{sort} compares the entire
|
||||
lines. The last resort comparison
|
||||
honors the @samp{-r} global option. The @samp{-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
|
||||
@@ -2063,7 +2066,10 @@ or global options are specified, @samp{-s} has no effect.
|
||||
GNU @code{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
|
||||
@code{sort} silently supplies one.
|
||||
@code{sort} silently supplies one. A line's trailing newline is part of
|
||||
the line for comparison purposes; for example, with no options in an
|
||||
@sc{ASCII} locale, a line starting with a tab sorts before an empty line
|
||||
because tab precedes newline in the @sc{ASCII} collating sequence.
|
||||
|
||||
Upon any error, @code{sort} exits with a status of @samp{2}.
|
||||
|
||||
@@ -2073,11 +2079,14 @@ value as the directory for temporary files instead of @file{/tmp}. The
|
||||
@samp{-T @var{tempdir}} option in turn overrides the environment
|
||||
variable.
|
||||
|
||||
@vindex LC_CTYPE
|
||||
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.
|
||||
not specify any special options of their own. The @samp{-b}, @samp{-d},
|
||||
@samp{-f} and @samp{-i} options classify characters according to
|
||||
the @env{LC_CTYPE} locale.
|
||||
|
||||
@table @samp
|
||||
|
||||
@@ -2102,40 +2111,59 @@ sorting so that, for example, @samp{b} and @samp{B} sort as equal.
|
||||
@item -g
|
||||
@opindex -g
|
||||
@cindex general numeric sort
|
||||
Sort numerically, but use strtod(3) to arrive at the numeric values.
|
||||
Sort numerically, using the standard C function @code{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 @code{1.0e-34} and @code{10e100}. Use this option only if there
|
||||
is no alternative; it is much slower than @samp{-n} and numbers with
|
||||
too many significant digits will be compared as if they had been
|
||||
truncated. In addition, numbers outside the range of representable
|
||||
double precision floating point numbers are treated as if they were
|
||||
zeroes; overflow and underflow are not reported.
|
||||
like @code{1.0e-34} and @code{10e100}.
|
||||
Do not report overflow, underflow, or conversion errors.
|
||||
Use the following collating sequence:
|
||||
|
||||
@itemize @bullet
|
||||
@item
|
||||
Lines that do not start with numbers (all considered to be equal).
|
||||
@item
|
||||
NaNs (``Not a Number'' values, in IEEE floating point arithmetic)
|
||||
in a consistent but machine-dependent order.
|
||||
@item
|
||||
Minus infinity.
|
||||
@item
|
||||
Finite numbers in ascending numeric order (with @math{-0} and @math{+0} equal).
|
||||
@item
|
||||
Plus infinity.
|
||||
@end itemize
|
||||
|
||||
Use this option only if there is no alternative; it is much slower than
|
||||
@samp{-n} and it can lose information when converting to floating point.
|
||||
|
||||
@item -i
|
||||
@opindex -i
|
||||
@cindex unprintable characters, ignoring
|
||||
Ignore characters outside the printable ASCII range 040-0176 octal
|
||||
(inclusive) when sorting.
|
||||
Ignore unprintable characters.
|
||||
|
||||
@item -M
|
||||
@opindex -M
|
||||
@cindex months, sorting by
|
||||
@vindex LC_TIME
|
||||
An initial string, consisting of any amount of whitespace, followed
|
||||
by three letters abbreviating a month name, is folded to UPPER case and
|
||||
by a month name abbreviation, is folded to UPPER case and
|
||||
compared in the order @samp{JAN} < @samp{FEB} < @dots{} < @samp{DEC}.
|
||||
Invalid names compare low to valid names.
|
||||
Invalid names compare low to valid names. The @env{LC_TIME} locale
|
||||
determines the month spellings.
|
||||
|
||||
@item -n
|
||||
@opindex -n
|
||||
@cindex numeric sort
|
||||
@vindex LC_NUMERIC
|
||||
Sort numerically: the number begins each line; specifically, it consists
|
||||
of optional whitespace, an optional @samp{-} sign, and zero or more
|
||||
digits, optionally followed by a decimal point and zero or more digits.
|
||||
digits possibly separated by thousands separators, optionally followed
|
||||
by a radix character and zero or more digits. The @env{LC_NUMERIC}
|
||||
locale specifies the radix character and thousands separator.
|
||||
|
||||
@code{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 @code{double} type and then
|
||||
comparing those values, sort aligns the decimal points in the two
|
||||
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
|
||||
@@ -2180,7 +2208,7 @@ following.
|
||||
|
||||
@item -u
|
||||
@opindex -u
|
||||
@cindex uniqifying output
|
||||
@cindex uniquifying output
|
||||
For the default case or the @samp{-m} option, only output the first
|
||||
of a sequence of lines that compare equal. For the @samp{-c} option,
|
||||
check that no pair of consecutive lines compares equal.
|
||||
@@ -2199,7 +2227,7 @@ See below for more examples.
|
||||
@opindex -z
|
||||
@cindex sort zero-terminated lines
|
||||
Treat the input as a set of lines, each terminated by a zero byte (@sc{ASCII}
|
||||
@sc{NUL} (Null) character) instead of a @sc{ASCII} @sc{LF} (Line Feed.)
|
||||
@sc{NUL} (Null) character) instead of an @sc{ASCII} @sc{LF} (Line Feed).
|
||||
This option can be useful in conjunction with @samp{perl -0} or
|
||||
@samp{find -print0} and @samp{xargs -0} which do the same in order to
|
||||
reliably handle arbitrary pathnames (even those which contain Line Feed
|
||||
@@ -2342,10 +2370,10 @@ sort -t : -b -k 5,5 -k 3,3n /etc/passwd
|
||||
|
||||
|
||||
@node uniq invocation
|
||||
@section @code{uniq}: Uniqify files
|
||||
@section @code{uniq}: Uniquify files
|
||||
|
||||
@pindex uniq
|
||||
@cindex uniqify files
|
||||
@cindex uniquify files
|
||||
|
||||
@code{uniq} writes the unique lines in the given @file{input}, or
|
||||
standard input if nothing is given or for an @var{input} name of
|
||||
@@ -2618,7 +2646,7 @@ 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,
|
||||
@emph{unless} if it is compiled for MS-DOS, in which case it uses the
|
||||
character set of the IBM-PC. (GNU @code{ptx} is not known to work on
|
||||
smaller MS-DOS machines anymore.) Compared to 7-bit ASCII, the set of
|
||||
smaller MS-DOS machines anymore.) Compared to 7-bit @sc{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.
|
||||
@@ -2907,7 +2935,7 @@ sequence @code{^\@{ @}} and @code{~\@{ @}} 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
|
||||
not part of @sc{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{}.
|
||||
|
||||
@@ -3842,8 +3870,8 @@ yourself using when setting up fancy data plumbing. The @code{sort}
|
||||
command reads and sorts each file named on the command line. It then
|
||||
merges the sorted data and writes it to standard output. It will read
|
||||
standard input if no files are given on the command line (thus
|
||||
making it into a filter). The sort is based on the machine collating
|
||||
sequence (@sc{ASCII}) or based on user-supplied ordering criteria.
|
||||
making it into a filter). The sort is based on the character collating
|
||||
sequence or based on user-supplied ordering criteria.
|
||||
|
||||
|
||||
@node The uniq command
|
||||
@@ -4019,7 +4047,7 @@ $ tr '[A-Z]' '[a-z]' < whats.gnu | tr -cd '[A-Za-z0-9_ \012]' | ...
|
||||
The second @code{tr} command operates on the complement of the listed
|
||||
characters, which are all the letters, the digits, the underscore, and
|
||||
the blank. The @samp{\012} represents the newline character; it has to
|
||||
be left alone. (The ASCII TAB character should also be included for
|
||||
be left alone. (The @sc{ASCII} tab character should also be included for
|
||||
good measure in a production script.)
|
||||
|
||||
At this point, we have data consisting of words separated by blank space.
|
||||
@@ -4065,7 +4093,7 @@ with the help of two more @code{sort} options:
|
||||
|
||||
@table @samp
|
||||
@item -n
|
||||
do a numeric sort, not an ASCII one
|
||||
do a numeric sort, not a textual one
|
||||
|
||||
@item -r
|
||||
reverse the order of the sort
|
||||
|
||||
Reference in New Issue
Block a user