Reference

sort(1)

sort lines of text files

NAME

sort - sort lines of text files

SYNOPSIS

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

DESCRIPTION

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 when finding sort keys in each line

-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 full documentation for supported strings

-R, --random-sort

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

--random-source=FILE

get random bytes from FILE

-r, --reverse

reverse the result of comparisons

--sort=WORD

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:

--batch-size=NMERGE

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-program=PROG

compress temporaries with PROG; decompress them with PROG -d

--debug

annotate the part of the line used to sort, and warn about questionable usage to standard error

--files0-from=F

read input from the files specified by NUL-terminated names in file F; If F is -, 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

--parallel=N

change the number of sorts run concurrently to N

-u, --unique

output only the first of lines with equal keys; with -c, check for strict ordering

-z, --zero-terminated

line delimiter is NUL, not newline

--help

display this help and exit

--version

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.

AUTHOR

Written by Mike Haertel and Paul Eggert.

REPORTING BUGS

Report bugs to: <[email protected]>.
Report any translation bugs to: <https://translationproject.org/team/>.
GNU coreutils home page: <https://www.gnu.org/software/coreutils/>
General help using GNU software: <https://www.gnu.org/gethelp/>

COPYRIGHT

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

SEE ALSO

shuf(1), uniq(1)

Full documentation <https://www.gnu.org/software/coreutils/sort>
or available locally via: info '(coreutils) sort invocation'

History

--batch-size since Debian 6.0 (Squeeze); --buffer-size since Debian 3.1 (Sarge); --check since Debian 3.1 (Sarge); --compress-program since Debian 5.0 (Lenny); --debug since Debian 7 (Wheezy); --dictionary-order since Debian 3.1 (Sarge); --field-separator since Debian 4.0 (Etch); --files0-from since Debian 6.0 (Squeeze); --general-numeric-sort since Debian 3.1 (Sarge); --human-numeric-sort since Debian 6.0 (Squeeze); --ignore-case since Debian 3.1 (Sarge); --ignore-leading-blanks since Debian 4.0 (Etch); --ignore-nonprinting since Debian 3.1 (Sarge); --key since Debian 3.1 (Sarge); --merge since Debian 3.1 (Sarge); --month-sort since Debian 3.1 (Sarge); --numeric-sort since Debian 3.1 (Sarge); --output since Debian 3.1 (Sarge); --parallel since Debian 7 (Wheezy); --random-sort since Debian 5.0 (Lenny); --random-source since Debian 5.0 (Lenny); --reverse since Debian 3.1 (Sarge); --sort since Debian 6.0 (Squeeze); --stable since Debian 3.1 (Sarge); --temporary-directory since Debian 3.1 (Sarge); --unique since Debian 3.1 (Sarge); --version-sort since Debian 6.0 (Squeeze); --zero-terminated since Debian 3.1 (Sarge); -C since Debian 5.0 (Lenny); -R since Debian 5.0 (Lenny); -S since Debian 3.1 (Sarge); -T since Debian 2.2 (Potato); -V since Debian 6.0 (Squeeze); -b since Debian 4.0 (Etch); -g since Debian 2.2 (Potato); -h since Debian 6.0 (Squeeze); -s since Debian 2.2 (Potato); -t since Debian 4.0 (Etch); -z since Debian 2.2 (Potato).