sort - Man Page

sort lines of text files

Examples (TL;DR)


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


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

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

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; see manual for which strings are supported

-R,  --random-sort

shuffle, but group identical keys.  See shuf(1)


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=KEYDEF

sort via a key; KEYDEF gives location and type

-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

line delimiter is NUL, not newline


display this help and exit


output version information and exit

KEYDEF is F[.C][OPTS][,F[.C][OPTS]] for start and stop position, where F is a field number and C a character position in the field; both are origin 1, and the stop position defaults to the line's end.  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 [bdfgiMhnRrV], which override global ordering options for that key.  If no key is given, use the entire line as the key.  Use --debug to diagnose incorrect key usage.

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, R, Q.

*** 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.

Reporting Bugs

GNU coreutils online help: <>
Report any translation bugs to <>

See Also

shuf(1), uniq(1)

Full documentation <>
or available locally via: info '(coreutils) sort invocation'

Referenced By

bsearch(1), column(1), cracklib-format(8), ctags(1), datamash(1), decorate(1), dnssort(1), environ(7), fastrm(1), flowdumper(1), grep(1), heapsort.3bsd(3), look(1), makehistory(8), mlr(1), msort(1), prlimit(1), ps(1), qsort(3), radixsort.3bsd(3), remind(1), rpmsort(8), rs(1), rwhois_indexer(8), uniq(1), zipinfo(1).

April 2024 GNU coreutils 9.5