--get your your Linux knowledge
> Linux Reviews > Manual Pages (man) >


sort lines of text files



Manpage of SORT


Section: User Commands (1)
Updated: October 2011
Index Return to Main Contents


sort - sort lines of text files  


sort [OPTION]... [FILE]...
sort [OPTION]... --files0-from=F  


Write sorted concatenation of all FILE(s) to standard output.

Mandatory arguments to long options are mandatory for short options too. Ordering options:

-b, --ignore-leading-blanks
ignore leading blanks
-d, --dictionary-order
consider only blanks and alphanumeric characters
-f, --ignore-case
fold lower case to upper case characters
-g, --general-numeric-sort
compare according to general numerical value
-i, --ignore-nonprinting
consider only printable characters
-M, --month-sort
compare (unknown) < `JAN' < ... < `DEC'
-h, --human-numeric-sort
compare human readable numbers (e.g., 2K 1G)
-n, --numeric-sort
compare according to string numerical value
-R, --random-sort
sort by random hash of keys
get random bytes from FILE
-r, --reverse
reverse the result of comparisons
sort according to WORD: general-numeric -g, human-numeric -h, month -M, numeric -n, random -R, version -V
-V, --version-sort
natural sort of (version) numbers within text

Other options:

merge at most NMERGE inputs at once; for more use temp files
-c, --check, --check=diagnose-first
check for sorted input; do not sort
-C, --check=quiet, --check=silent
like -c, but do not report first bad line
compress temporaries with PROG; decompress them with PROG -d
annotate the part of the line used to sort, and warn about questionable usage to stderr
read input from the files specified by NUL-terminated names in file F; If F is - then read names from standard input
-k, --key=POS1[,POS2]
start a key at POS1 (origin 1), end it at POS2 (default end of line). See POS syntax below
-m, --merge
merge already sorted files; do not sort
-o, --output=FILE
write result to FILE instead of standard output
-s, --stable
stabilize sort by disabling last-resort comparison
-S, --buffer-size=SIZE
use SIZE for main memory buffer
-t, --field-separator=SEP
use SEP instead of non-blank to blank transition
-T, --temporary-directory=DIR
use DIR for temporaries, not $TMPDIR or /tmp; multiple options specify multiple directories
change the number of sorts run concurrently to N
-u, --unique
with -c, check for strict ordering; without -c, output only the first of an equal run
-z, --zero-terminated
end lines with 0 byte, not newline
display this help and exit
output version information and exit

POS is F[.C][OPTS], where F is the field number and C the character position in the field; both are origin 1. If neither -t nor -b is in effect, characters in a field are counted from the beginning of the preceding whitespace. OPTS is one or more single-letter ordering options, which override global ordering options for that key. If no key is given, use the entire line as the key.

SIZE may be followed by the following multiplicative suffixes: % 1% of memory, b 1, K 1024 (default), and so on for M, G, T, P, E, Z, Y.

With no FILE, or when FILE is -, read standard input.

*** WARNING *** The locale specified by the environment affects sort order. Set LC_ALL=C to get the traditional sort order that uses native byte values.  


Written by Mike Haertel and Paul Eggert.  


Report sort bugs to
GNU coreutils home page: <>
General help using GNU software: <>
Report sort translation bugs to <>  


Copyright © 2011 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later <>.
This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law.  


The full documentation for sort is maintained as a Texinfo manual. If the info and sort programs are properly installed at your site, the command
info coreutils aqsort invocationaq

should give you access to the complete manual.




This document was created by man2html using the manual pages.
Time: 17:32:31 GMT, October 23, 2013


Manpage of sort


Section: Perl Programmers Reference Guide (3)
Updated: 2001-09-21
Index Return to Main Contents


sort - perl pragma to control sort() behaviour  


    use sort 'stable';          # guarantee stability
    use sort '_quicksort';      # use a quicksort algorithm
    use sort '_mergesort';      # use a mergesort algorithm
    use sort 'defaults';        # revert to default behavior
    no  sort 'stable';          # stability not important

    use sort '_qsort';          # alias for quicksort

    my $current = sort::current();      # identify prevailing algorithm



With the "sort" pragma you can control the behaviour of the builtin "sort()" function.

In Perl versions 5.6 and earlier the quicksort algorithm was used to implement "sort()", but in Perl 5.8 a mergesort algorithm was also made available, mainly to guarantee worst case O(N log N) behaviour: the worst case of quicksort is O(N**2). In Perl 5.8 and later, quicksort defends against quadratic behaviour by shuffling large arrays before sorting.

A stable sort means that for records that compare equal, the original input ordering is preserved. Mergesort is stable, quicksort is not. Stability will matter only if elements that compare equal can be distinguished in some other way. That means that simple numerical and lexical sorts do not profit from stability, since equal elements are indistinguishable. However, with a comparison such as

   { substr($a, 0, 3) cmp substr($b, 0, 3) }

stability might matter because elements that compare equal on the first 3 characters may be distinguished based on subsequent characters. In Perl 5.8 and later, quicksort can be stabilized, but doing so will add overhead, so it should only be done if it matters.

The best algorithm depends on many things. On average, mergesort does fewer comparisons than quicksort, so it may be better when complicated comparison routines are used. Mergesort also takes advantage of pre-existing order, so it would be favored for using "sort()" to merge several sorted arrays. On the other hand, quicksort is often faster for small arrays, and on arrays of a few distinct values, repeated many times. You can force the choice of algorithm with this pragma, but this feels heavy-handed, so the subpragmas beginning with a "_" may not persist beyond Perl 5.8. The default algorithm is mergesort, which will be stable even if you do not explicitly demand it. But the stability of the default sort is a side-effect that could change in later versions. If stability is important, be sure to say so with a

  use sort 'stable';

The "no sort" pragma doesn't forbid what follows, it just leaves the choice open. Thus, after

  no sort qw(_mergesort stable);

a mergesort, which happens to be stable, will be employed anyway. Note that

  no sort "_quicksort";
  no sort "_mergesort";

have exactly the same effect, leaving the choice of sort algorithm open.  


This pragma is not lexically scoped: its effect is global to the program it appears in. That means the following will probably not do what you expect, because both pragmas take effect at compile time, before either "sort()" happens.

  { use sort "_quicksort";
    print sort::current . "
"; @a = sort @b; } { use sort "stable"; print sort::current . "
"; @c = sort @d; } # prints: # quicksort stable # quicksort stable

You can achieve the effect you probably wanted by using "eval()" to defer the pragmas until run time. Use the quoted argument form of "eval()", not the BLOCK form, as in

  eval { use sort "_quicksort" }; # WRONG

or the effect will still be at compile time. Reset to default options before selecting other subpragmas (in case somebody carelessly left them on) and after sorting, as a courtesy to others.

  { eval 'use sort qw(defaults _quicksort)'; # force quicksort
    eval 'no sort "stable"';      # stability not wanted
    print sort::current . "
"; @a = sort @b; eval 'use sort "defaults"'; # clean up, for others } { eval 'use sort qw(defaults stable)'; # force stability print sort::current . "
"; @c = sort @d; eval 'use sort "defaults"'; # clean up, for others } # prints: # quicksort # stable

Scoping for this pragma may change in future versions.




This document was created by man2html using the manual pages.
Time: 17:32:31 GMT, October 23, 2013


Meet new people