Я пытаюсь использовать команду сортировки (5.97) для сортировки одного столбца данных, а затем другого.

Прямо сейчас я делаю:

 > ls test/2/*.jpg | sort -t- -k1 -g -s
test/2/0-0.jpg
test/2/0-10.jpg
test/2/0-1.jpg
test/2/0-2.jpg
test/2/0-3.jpg
test/2/0-4.jpg
test/2/0-5.jpg
test/2/0-6.jpg
test/2/0-7.jpg
test/2/0-8.jpg
test/2/0-9.jpg
test/2/1-0.jpg
test/2/1-10.jpg
test/2/1-1.jpg
test/2/1-2.jpg
test/2/1-3.jpg
test/2/1-4.jpg
test/2/1-5.jpg
test/2/1-6.jpg
test/2/1-7.jpg
test/2/1-8.jpg
test/2/1-9.jpg
test/2/2-0.jpg
test/2/2-10.jpg
test/2/2-1.jpg
test/2/2-2.jpg
test/2/2-3.jpg
test/2/2-4.jpg
test/2/2-5.jpg
test/2/2-6.jpg
test/2/2-7.jpg
test/2/2-8.jpg
test/2/2-9.jpg

Но, как вы видите, двузначные числа находятся не в том месте. Есть ли способ сделать это с помощью сортировки?

2 ответа2

2

Добавьте «-k2» после вашего «-k1». Т.е.

ls test/2/*.jpg | sort -t- -k1 -k2 -g -s   (or sort -t- -n -k1 -k2)

Если есть конфликт, он будет использовать 2-е поле (-k2) для разрешения и (ну, я использую) -n рассматривает их как числа. Если бы вы изменили порядок и поставили -k2 -k1, он отсортировал бы по второму номеру в имени файла и использовал бы первый только в случае конфликта.

1

эй, причина, по которой она не сортируется, заключается в том, что команда сортировки не может идентифицировать какие-либо числа в каждой строке. Это рассматривает это как последовательности. Попробуйте выполнить ту же команду с удаленным суффиксом .jpg. Вы получите заказ, который вы намерены. См. Http://www.softpanorama.org/Tools/sort.shtml . В этой ссылке читайте раздел Опции заказа (опция -n). Надеюсь, это решит вашу проблему.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .