У меня есть файл данных следующим образом;
ALIC 5.55 2.65 3.45
ALIC 2.56 2.78 3.99
AMC4 3.55 3.66 4.88
AMC4 3.00 3.67 4.78
ALIC 1.00 1.00 1.00
ALIC 0.95 1.00 1.00
AMC4 0.50 1.00 1.00
AMC4 0.01 1.00 1.00
Я должен отсортировать эти строки w.r.t строки в первом столбце следующим образом;
ALIC 5.55 2.65 3.45
ALIC 2.56 2.78 3.99
ALIC 1.00 1.00 1.00
ALIC 0.95 1.00 1.00
AMC4 3.55 3.66 4.88
AMC4 3.00 3.67 4.78
AMC4 0.50 1.00 1.00
AMC4 0.01 1.00 1.00
Но когда я выполняюсь sort -k 1 data
, Я вижу, что числовые значения во втором столбце отсортированы как порядок по возрастанию. Какая команда производят вышеупомянутую сортировку?
Существует две вещи, которые необходимо сделать.
Во-первых, sort -k 1
запускается в ключевом 1, но остановками по умолчанию в конце строки: к виду только на ключевом 1, Вам нужно -k 1,1
Во-вторых, GNU по умолчанию sort
выполняет заключительный вид "последнего средства" на целой строке - для подавления этого, необходимо добавить --stable
опция.
Так
$ sort --stable -k 1,1 data
ALIC 5.55 2.65 3.45
ALIC 2.56 2.78 3.99
ALIC 1.00 1.00 1.00
ALIC 0.95 1.00 1.00
AMC4 3.55 3.66 4.88
AMC4 3.00 3.67 4.78
AMC4 0.50 1.00 1.00
AMC4 0.01 1.00 1.00
Это отсортирует по первому столбцу в порядке возрастания (как обычно), и затем по второму столбцу в убывающем (обратном) порядке. Второй столбец интерпретируется как число:
$ sort -k 1,1 -k 2nr,2 < in.txt
ALIC 5.55 2.65 3.45
ALIC 2.56 2.78 3.99
ALIC 1.00 1.00 1.00
ALIC 0.95 1.00 1.00
AMC4 3.55 3.66 4.88
AMC4 3.00 3.67 4.78
AMC4 0.50 1.00 1.00
AMC4 0.01 1.00 1.00
Можно хотеть добавить --debug
флаг для наблюдения точно, на который ключи sort
работает:
$ sort --debug -k 1,1 -k 2nr,2 < in.txt
ALIC 5.55 2.65 3.45
____
____
___________________
ALIC 2.56 2.78 3.99
____
____
___________________
ALIC 1.00 1.00 1.00
____
____
___________________
...