Команда sort в Linux: как выполнить сортировку по числу, введенному в поле?

Команда sort в Linux: как выполнить сортировку по числу, введенному в поле?

Я работаю на RHEL 6, использую BASH.

Я пытаюсь отсортировать некоторые строки в файле по номеру, который встроен в поле. Имя файла — word.txt.

Вот команда, которую я использую:

sort -n -k4 word.txt

Вот что я получаю (не в числовом порядке):

INSERT INTO area_names VALUES(124,'NewYork');
INSERT INTO area_names VALUES(125,'NewYork');
INSERT INTO area_names VALUES(12,'NewYork');

Очевидно, что строка, содержащая только «12», должна быть первой.

Число после "VALUES(" может быть любой длины.

Как мне указать sort сортировать по числу между "VALUES(" и ","?

Я могу прибегнуть к обходному пути, поместив пробел после «VALUES(» в данных, но я бы предпочел этого не делать, если только это не лучший вариант.

решение1

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

 sort -t "(" -k2,2 -n word.txt

Выход

ВСТАВИТЬ В area_names ЗНАЧЕНИЯ(12,'Нью-Йорк');
ВСТАВИТЬ В area_names ЗНАЧЕНИЯ(124,'Нью-Йорк');
ВСТАВИТЬ В area_names ЗНАЧЕНИЯ(125,'Нью-Йорк');

-k POS1[,POS2]

     Укажите поле сортировки, которое состоит из части строки между
     POS1 и POS2 (или конец строки, если POS2 пропущен),
     _включительно_.

     Каждая POS имеет форму `F[.C][OPTS]', где F - номер
     поле для использования, а C — номер первого символа из
     начало поля. Поля и позиции символов
     нумерация начинается с 1; позиция символа равна нулю в POS2
     указывает последний символ поля. Если `.C' опущено из
     POS1, по умолчанию 1 (начало поля); если не указано
     из POS2, по умолчанию 0 (конец поля). OPTS — это
     параметры упорядочивания, позволяющие сортировать отдельные ключи в соответствии с
     к разным правилам; подробности см. ниже. Ключи могут охватывать несколько
     поля.

     Пример: для сортировки по второму полю используйте `--key=2,2' (`-k 2,2').

Связанный контент