Я на 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 (») может быть любой длины

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

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

1 ответ1

2

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

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

Выход

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

-k POS1[,POS2]

     Specify a sort field that consists of the part of the line between
     POS1 and POS2 (or the end of the line, if POS2 is omitted),
     _inclusive_.

     Each POS has the form `F[.C][OPTS]', where F is the number of the
     field to use, and C is the number of the first character from the
     beginning of the field.  Fields and character positions are
     numbered starting with 1; a character position of zero in POS2
     indicates the field's last character.  If `.C' is omitted from
     POS1, it defaults to 1 (the beginning of the field); if omitted
     from POS2, it defaults to 0 (the end of the field).  OPTS are
     ordering options, allowing individual keys to be sorted according
     to different rules; see below for details.  Keys can span multiple
     fields.

     Example:  To sort on the second field, use `--key=2,2' (`-k 2,2').

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