Как отсортировать файл на основе раздела поля

11

Я хотел бы отсортировать файл:

   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команду?
Эрик Ренуф
да, но, видимо, я не знаю, как правильно его использовать .... Я пробовал: сортировать -b + 0,1n -1, но также сортировать -n -k1,1 -k1,4 (и другие), но ни один из те работали
Эдит
1
Вы хотите отсортировать по числу, начиная со второго символа?
pfnuesel
точно. проблема в том, что в первом файле есть разные номера
пробелов

Ответы:

19
sort -k 1.2bn < file

Сорта numerically на kеу , начиная с 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можно отсортировать (по связям на первом ключе) лексически на участке строки, который начинается с первого поля, игнорируя начальные пробелы.

Стефан Шазелас
источник