Это данные, которые я хочу отсортировать. Но sort
обрабатывает число в строку, данные не сортируются, как я ожидал.
/ home / файлы / profile1
/ home / файлы / profile10
/ home / файлы / profile11
/ home / файлы / profile12
/ home / файлы / profile14
/ home / файлы / profile15
/ home / файлы / profile16
/ home / файлы / profile2
/ home / files / profile3
/ home / files / profile4
/ home / files / profile5
/ home / files / profile6
/ home / files / profile7
/ home / files / profile8
/ home / files / profile9
Я хочу отсортировать это,
/ home / файлы / profile1
/ home / файлы / profile2
/ home / файлы / profile3
/ home / файлы / profile4
/ home / файлы / profile5
/ home / файлы / profile6
/ home / файлы / profile7
/ home / файлы / profile8
/ home / files / profile9
/ home / files / profile10
/ home / files / profile11
/ home / files / profile12
/ home / files / profile14
/ home / files / profile15
/ home / files / profile16
Есть ли хороший способ сценария bash? Я не могу использовать Ruby или Python скрипт здесь.
источник
sort -V
сделал бы.Ответы:
Вы можете использовать временный символ стража, чтобы разделить число:
Здесь сторожевой символ ';' - оно не должно быть частью какого-либо имени файла, который вы хотите отсортировать, но вы можете поменять ';' с любым персонажем, который вам нравится. Вы должны изменить
sed
,sort
аtr
затем часть соответственно.Канал работает следующим образом:
sed
команда вставляет страж перед любым числом,sort
команда интерпретирует страж как разделитель полей, сортирует со вторым полем как числовой ключ сортировки, иtr
команда снова удаляет страж.И
log
обозначает входной файл - вы также можете направить свой вход вsed
.источник
Это очень похоже на этот вопрос . Проблема в том, что у вас есть алфавитно-цифровое поле, по которому вы сортируете, и
-n
это не обрабатывается разумно, как это-V
делает версия sort ( ). Таким образом используйте:Обратите внимание, что эта функция в настоящее время поддерживается реализациями сортировки GNU, FreeBSD и OpenBSD.
источник
sort -V
неsort -v
. Трудно сказать с первого взгляда.Если все имена файлов имеют одинаковый префикс перед конечной числовой частью, игнорируйте его при сортировке:
(20 - позиция первой цифры. Это один плюс длина
/home/files/profile
.)Если у вас есть несколько разных нечисловых частей, введите часовой .
источник