
Я работаю на 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').