Вы можете использовать несколько -kфлагов для сортировки более чем по одному столбцу. Например, чтобы отсортировать по фамилии, затем имя в качестве разрешения конфликта:
sort -k 2,2 -k 1,1 file.txt
Актуальные варианты от "man sort":
-k, --key = POS1 [, POS2]
начать ключ в POS1, закончить его в POS2 (начало 1)
POS - это F [.C] [OPTS], где F - номер поля, а C - позиция символа в поле. OPTS - это одна или несколько однобуквенных опций упорядочивания, которые имеют приоритет над глобальными опциями упорядочивания для этого ключа. Если ключ не указан, используйте всю строку в качестве ключа.
-t, --field-separator = SEP
используйте SEP вместо перехода от непустого к пустому
Просто будьте осторожны при использовании, --field-separator=','если у вас может быть оператор ввода данных в значениях для «Имя», например «Билли Боб» или что-то еще ... пробелы могут легко попасть в ваши данные, если вы не защититесь от этого, но запятые относительно маловероятны.
Тони Делрой
1
Скорее всего, в этих полях есть запятые, например "Smith, Jr." или "Макдауэлл-старший" или «Доктор Джон» или «Нью-Йорк, Нью-Йорк»
jbnunn
2
Обратите внимание, что если столбцы визуально выровнены, то есть между полями есть непостоянное количество пробелов, вы должны использовать эту -bопцию. Это связано с тем, что sortна самом деле считается, что строка для сортировки начинается сразу после запятой, а не с первой буквы столбца. Кроме того, вам может потребоваться префикс команды LC_ALL=C, чтобы избежать побочных эффектов из-за локали, которые могут произойти даже с простым файлом ASCII.
Calandoa
@calandoa Спасибо за участие в -b( --ignore-leading-blanks). Чтобы немного уточнить: echo -e 'aa<SPACE>a\na<SPACE><SPACE>b' | sort -k2дает a<SPACE><SPACE>bпервый (второй столбец начинается после первого non-blank to blank transitionи <SPACE><SPACE>bнаходится перед <SPACE>a), но с -bним дает, aa<SPACE>aкак ожидалось (было aраньше b).
Кирилл Булыгин
7
Для сортировки только по второму полю (таким образом, когда совпадают вторые поля, те строки с совпадениями остаются в том порядке, в котором они находятся в оригинале, без сортировки по другим полям):
FWIW, вот метод сортировки, показывающий, какие процессы используют наибольшую виртуальную память.
memstat | sort -k 1 -t':' -g -r | less
Параметры сортировки устанавливаются для первого столбца с использованием: в качестве разделителя столбцов, числовой сортировки и сортировки в обратном порядке.
Ответы:
Если это UNIX:
Вы можете использовать несколько
-k
флагов для сортировки более чем по одному столбцу. Например, чтобы отсортировать по фамилии, затем имя в качестве разрешения конфликта:Актуальные варианты от "man sort":
источник
--field-separator=','
если у вас может быть оператор ввода данных в значениях для «Имя», например «Билли Боб» или что-то еще ... пробелы могут легко попасть в ваши данные, если вы не защититесь от этого, но запятые относительно маловероятны.-b
опцию. Это связано с тем, чтоsort
на самом деле считается, что строка для сортировки начинается сразу после запятой, а не с первой буквы столбца. Кроме того, вам может потребоваться префикс командыLC_ALL=C
, чтобы избежать побочных эффектов из-за локали, которые могут произойти даже с простым файлом ASCII.-b
(--ignore-leading-blanks
). Чтобы немного уточнить:echo -e 'aa<SPACE>a\na<SPACE><SPACE>b' | sort -k2
даетa<SPACE><SPACE>b
первый (второй столбец начинается после первогоnon-blank to blank transition
и<SPACE><SPACE>b
находится перед<SPACE>a
), но с-b
ним дает,aa<SPACE>a
как ожидалось (былоa
раньшеb
).Для сортировки только по второму полю (таким образом, когда совпадают вторые поля, те строки с совпадениями остаются в том порядке, в котором они находятся в оригинале, без сортировки по другим полям):
источник
FWIW, вот метод сортировки, показывающий, какие процессы используют наибольшую виртуальную память.
memstat | sort -k 1 -t':' -g -r | less
Параметры сортировки устанавливаются для первого столбца с использованием: в качестве разделителя столбцов, числовой сортировки и сортировки в обратном порядке.
источник
Соответственно вы можете изменить номер столбца.
источник