I want to sort a unix file by the id column but when I use sort -k4,4 or -k4,4n I do not get the expected result.
The column of interest should be sorted like this:
id1
id2
id3
id4
etc.
Instead it is sorted like this when i do sort -k4,4
id1
id10
id100
id1000
id10000
id10001
etc.
My unix version uses the following sort function:
sort --help
Usage: sort [OPTION]... [FILE]...
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'
-n, --numeric-sort compare according to string numerical value
-r, --reverse reverse the result of comparisons
Other options:
-c, --check check whether input is sorted; do not sort
-k, --key=POS1[,POS2] start a key at POS1, end it at POS2 (origin 1)
-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
-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
--help display this help and exit
--version output version information and exit
Use the
-Vor--version-sortoption for version sortsort -V -k4,4 file.txtExample:
Ouput:
EDIT:
If your implementation of
sortdoesn’t have the-Voption then a work-around usingsedto removeidso a numeric sort-ncan be done and then replaceidback withsed, like this:Note: this solution is dependent on the data, only works if no columns containing purely numbers are found before the ID column.