Як сортувати файл на основі розділу поля


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команду?
Ерік Реноф

так, але, мабуть, я не знаю, як tu правильно його використовувати .... Я спробував: сортувати -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сортуватиметься (за зв'язками на першому ключі) лексично на ділянці рядка, що починається з першого поля, ігноруючи провідні пробіли.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.