Ответ 1
Используйте ls -lv
На странице man:
-v natural sort of (version) numbers within text
Вот список файлов:
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?
Используйте ls -lv
На странице man:
-v natural sort of (version) numbers within text
Попробуйте следующее:
sort -t '_' -k 2n
-t '_'
(устанавливает разделитель символом подчеркивания)-k 2n
(сортируется по второму столбцу, используя числовое упорядочение)DEMO.
В общем случае попробуйте преобразование Шварца.
Вкратце, выровняйте число в свое поле, отсортируйте его и отбросьте добавленное поле.
# 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
где вы хотите, чтобы сортировка переместила последнюю строку сразу после первого.