Подтвердить что ты не робот

Как отсортировать строки, которые содержат общий префикс и суффикс численно из Bash?

Вот список файлов:

some.string_100_with_numbers.in-it.txt
some.string_101_with_numbers.in-it.txt
some.string_102_with_numbers.in-it.txt
some.string_23_with_numbers.in-it.txt
some.string_24_with_numbers.in-it.txt
some.string_25_with_numbers.in-it.txt

Теперь я хотел бы отсортировать его численно. Начиная с * 23 * и заканчивая на * 102 *.

Я пробовал -n и -g. -t не помогает в этих беспорядочных строках.

Могу ли я игнорировать ведущие строки номера с опцией или мне нужно быть умным и script?

4b9b3361

Ответ 1

Используйте ls -lv

На странице man:

-v     natural sort of (version) numbers within text

Ответ 2

Попробуйте следующее:

sort -t '_' -k 2n
  • -t '_' (устанавливает разделитель символом подчеркивания)
  • -k 2n (сортируется по второму столбцу, используя числовое упорядочение)

DEMO.

Ответ 3

В общем случае попробуйте преобразование Шварца.

Вкратце, выровняйте число в свое поле, отсортируйте его и отбросьте добавленное поле.

# In many shells, use ctrl-v tab to insert a literal tab after the first \2
sed 's/^\([^0-9]*\)\([0-9][0-9]*\)/\2   \1\2/' file |
sort -n |
cut -f2-

Это хорошо работает, если на входе нет очевидного разделителя, например, для следующего ввода.

abc1
abc10
abc2

где вы хотите, чтобы сортировка переместила последнюю строку сразу после первого.