Сортировка числового столбца

pyRenamer имеет графический интерфейс и позволяет выполнять автоматический предварительный просмотр.
Поместите это в поле Исходный шаблон имени файла:

{#}.{#}.{#} {X}.mp3

И это в шаблон имени переименованного файла:

{4} {3}-{1}-{2}.mp3

Единственным недостатком является сортировка в режиме "Windows" (1, 10, 11, 2, 3, 4... ).

3
15.01.2020, 01:29
2 ответа

Вы собираетесь выполнять сортировку по столбцу 7 в числовом виде.

Это можно сделать с помощью

$ sort -n -k 7 file
id - 884209, researchers - 1
id - 904091, researchers - 1
id - 905525, researchers - 1
id - 916197, researchers - 1
id - 896781, researchers - 4
id - 908660, researchers - 5
id - 908876, researchers - 7
id - 910480, researchers - 10
id - 901026, researchers - 15

или с

$ sort -k 7n file
id - 884209, researchers - 1
id - 904091, researchers - 1
id - 905525, researchers - 1
id - 916197, researchers - 1
id - 896781, researchers - 4
id - 908660, researchers - 5
id - 908876, researchers - 7
id - 910480, researchers - 10
id - 901026, researchers - 15

Они эквивалентны.

Опция -nзадает числовую сортировку (в отличие от лексикографической сортировки ). Во втором примере выше nдобавляется в качестве спецификатора/модификатора конкретно к 7-му столбцу.

Спецификация столбца ключа сортировки, -k 7, заставит sortсортировать строки в столбце 7 и далее (строку от столбца 7 до конца ). В этом случае, поскольку столбец 7 является последним, имеется в виду только этот столбец. Если бы это имело значение, вы могли бы использовать -k 7,7вместо ("от столбца 7 до 7" ).

Если два ключа при сравнении равны, sortбудет использовать полную строку в качестве ключа сортировки, поэтому мы получили результат, который мы получили для первых четырех строк в вашем примере. Если бы вы хотели выполнить вторичную сортировку по второму столбцу, вы бы использовали sort -n -k 7,7 -k 2,2или sort -k 7,7n -k 2,2n(, указав тип сравнения отдельно для каждого столбца ). Опять же, если 7-й и 2-й столбцы сравнивают одно и то же между двумя строками, sortиспользовал бы лексикографическое сравнение полных строк.


Для численной сортировки по позиции 29 символа, которая соответствует первой цифре числовых значений в конце каждой строки в ваших примерных данных:

$ sort -k 1.29n file
id - 884209, researchers - 1
id - 904091, researchers - 1
id - 905525, researchers - 1
id - 916197, researchers - 1
id - 896781, researchers - 4
id - 908660, researchers - 5
id - 908876, researchers - 7
id - 910480, researchers - 10
id - 901026, researchers - 15

-k 1.29nозначает «сортировать по ключу, заданному 29-м символом 1-го поля(и далее, до конца строки ), численно».

-k 7,7n, использованное в тексте выше, просто эквивалентно -k 7.1,7.1n.

4
27.01.2020, 21:17

Для сортировки по позиции 28 нам нужно использовать разделитель NUL:

sort -t '\0' -k 1.28 file
id - 884209, researchers - 1
id - 904091, researchers - 1
id - 905525, researchers - 1
id - 916197, researchers - 1
id - 910480, researchers - 10
id - 901026, researchers - 15
id - 896781, researchers - 4
id - 908660, researchers - 5
id - 908876, researchers - 7

0
27.01.2020, 21:17

Теги

Похожие вопросы