Я хотел бы отсортировать файл:
D104HN-D104HA 8.320 4.521 1.69e+05 -- D104HN-D104HB* 8.320 2.823 2.93e+05 -- A90HB#-A90HA 1.655 4.207 7.12e+05 -- A90HB#-F91HA 1.653 4.411 8.59e+04 -- A114HB#-A114HA 1.253 4.098 7.67e+05 -- A114HB#-R111HA 1.251 3.929 1.76e+05 -- A114HB#-W110HA 1.253 4.451 3.68e+04 -- F91HE*-F91HZ 7.237 7.122 7.85e+05 -- F91HE*-K92HA 7.242 3.910 4.88e+04 --
и получить это
A90HB#-A90HA 1.655 4.207 7.12e+05 -- A90HB#-F91HA 1.653 4.411 8.59e+04 -- F91HE*-F91HZ 7.237 7.122 7.85e+05 -- F91HE*-K92HA 7.242 3.910 4.88e+04 -- D104HN-D104HA 8.320 4.521 1.69e+05 -- D104HN-D104HB* 8.320 2.823 2.93e+05 -- A114HB#-A114HA 1.253 4.098 7.67e+05 -- A114HB#-R111HA 1.251 3.929 1.76e+05 -- A114HB#-W110HA 1.253 4.451 3.68e+04 --
То есть, сортировать численно на втором и последующих символах первой последовательности незабитых строк.
sort -k 1.2bn < file
Сортирует n
umerically на k
ey, начиная с 2
го символа 1
го поля, игнорируя ведущие b
знаки (и заканчивая в конце строки, но это не имеет значения для численного сортировки, который учитывает только начальную последовательность десятичной цифр).
Обратите внимание: если есть связь, как между этими двумя строками:
F91HE*-K92HA 7.242 3.910 4.88e+04 -- F91HE*-F91HZ 7.237 7.122 7.85e+05 --
Затем порядок будет основан на методе последнего курорта, который полностью сопоставляет две строки в виде строк.
В некоторых локалях пробелы будут проигнорированы в первом случае для сравнения строк, в этом случае F91 будет существовать до K92 (как F
сортирует до K
). С другими, как и в языке C, пробелы не будут игнорироваться, а K92 будет тогда раньше F91 (пространство сортируется до F
).
Для типа последнего курорта, который игнорировал бы ведущие пробелы независимо от языка, вы могли бы сделать:
sort -k 1.2bn -k 1b < file
Этот 1b
будет сортировать (по ссылкам на первом ключе) лексически на участке линии, который начинается с первого поля, игнорирующего ведущие пробелы.