Сортировка строк с числами в Bash [дубликат]
этот вопрос уже есть ответ здесь:
Я часто хотел сортировать строки с числами в них так, чтобы при сортировке, например,abc_2, abc_1, abc_10
результат abc_1, abc_2, abc_10
. Каждый механизм сортировки, который я видел, abc_1, abc_10, abc_2
, то есть символ за символом слева.
есть ли эффективный способ сортировки, чтобы получить результат я хочу? Идея взглянуть на каждый символ, определить, является ли он цифрой, построить подстроку из последующих цифр и отсортировать ее как число слишком ужасна, чтобы созерцать в bash
.
не имеет бородатого * nix гуру реализовал альтернативную версию sort
С ?
3 ответов
выполнить этот
sort -t _ -k 2 -g data.file
- -t сепаратор
- -K ключ/колонки
- - G общая числовая сортировка
Я думаю, что это расширение 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
попробуй такое
$ 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