В приведенном ниже примере (исходный файл намного больше), как я могу отсортировать строки w.r.t. номер строки в / 185 / и / 215 /?
/home/sorbilene/GAMIT_PROCESS/displacement/2/185/gsoln/res_2017-185_2017-186/MEAN.SP80.mit.orbit.res:XYZ Reference position : 4256626.64484 2703340.32982 3894478.42832 (IGb08)
/home/sorbilene/GAMIT_PROCESS/displacement/2/215/gsoln/res_2017-215_2017-216/MEAN.SP80.mit.orbit.res:XYZ Reference position : 4256626.82197 2703340.51128 3894478.40716 (IGb08)
/home/sorbilene/GAMIT_PROCESS/displacement/2/185/gsoln/res_2017-185_2017-186/MEAN.SP80.mit.orbit.res:XYZ Reference position : 4256626.64992 2703340.34367 3894478.43906 (IGb08)
отсортированные строки должны быть следующими:
/home/sorbilene/GAMIT_PROCESS/displacement/2/185/gsoln/res_2017-185_2017-186/MEAN.SP80.mit.orbit.res:XYZ Reference position : 4256626.64484 2703340.32982 3894478.42832 (IGb08)
/home/sorbilene/GAMIT_PROCESS/displacement/2/185/gsoln/res_2017-185_2017-186/MEAN.SP80.mit.orbit.res:XYZ Reference position : 4256626.64992 2703340.34367 3894478.43906 (IGb08)
/home/sorbilene/GAMIT_PROCESS/displacement/2/215/gsoln/res_2017-215_2017-216/MEAN.SP80.mit.orbit.res:XYZ Reference position : 4256626.82197 2703340.51128 3894478.40716 (IGb08)
sort -t '/' -k 7 -n your_input_file
Объяснение:
-t '/'
определяет '/' как разделитель полей -k 7
принимает седьмое поле в качестве критерия сортировки ( пустое поле перед первым символом '/' также должно учитываться) -n
указывает числовую сортировку. Если вы хотите сохранить порядок входного файла для всех строк, где седьмое поле равно, вы можете добавить (а затем удалить) номер строки в качестве поля второй сортировки:
nl -n rz your_input_file | sort -n -k 7 -k 1 -t '/' | sed 's/^[0-9]*\t//'
Объяснение:
nl -n rz
добавляет номер строки, дополненный нулями, перед каждой строкой sort
сортирует после седьмого поля, а затем номер строки sed
удаляет номер строки.