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

Bash: сортировка строк с номерами

Я часто хотел сортировать строки с числами в них, чтобы при сортировке, например. abc_2, abc_1, abc_10 результат abc_1, abc_2, abc_10. Каждый механизм сортировки, который я видел, выглядит как abc_1, abc_10, abc_2, то есть символ по символу слева.

Есть ли эффективный способ сортировки, чтобы получить результат, который я хочу? Идея взглянуть на каждый символ, определяя, является ли это цифрой, построение подстроки из последующих цифр и сортировка по ней в виде числа слишком ужасающей для рассмотрения в bash.

Нет бородатых * nix guru реализовал альтернативную версию sort с опцией --sensible_numerical?

4b9b3361

Ответ 1

Выполните этот

sort -t _ -k 2 -g data.file
  • -t разделитель
  • -k ключ/столбец
  • -g общая цифровая сортировка

Ответ 2

Я думаю, что это расширение GNU для sort, но вы ищете опцию --version-sort (или -V):

$ printf "prefix%d\n" $(seq 10 -3 1)
prefix10
prefix7
prefix4
prefix1

$ printf "prefix%d\n" $(seq 10 -3 1) | sort
prefix1
prefix10
prefix4
prefix7

$ printf "prefix%d\n" $(seq 10 -3 1) | sort --version-sort
prefix1
prefix4
prefix7
prefix10

https://www.gnu.org/software/coreutils/manual/html_node/sort-invocation.html

Ответ 3

Попробуйте это

$ cat a.txt
abc_1
abc_4
abc_2
abc_10
abc_5

$ sort -V a.txt
abc_1
abc_2
abc_4
abc_5
abc_10