Сортировка файла оболочки Linux по второму столбцу?


88

У меня есть такой файл:

FirstName, FamilyName, Address, PhoneNumber

Как я могу отсортировать его по фамилии?


какая ОС и командный процессор?
Preet Sangha,

Ответы:


153

Если это UNIX:

sort -k 2 file.txt

Вы можете использовать несколько -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 вместо перехода от непустого к пустому


2
Просто будьте осторожны при использовании, --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

Для сортировки только по второму полю (таким образом, когда совпадают вторые поля, те строки с совпадениями остаются в том порядке, в котором они находятся в оригинале, без сортировки по другим полям):

sort -k 2,2 -s orig_file > sorted_file

3

FWIW, вот метод сортировки, показывающий, какие процессы используют наибольшую виртуальную память.

memstat | sort -k 1 -t':' -g -r | less

Параметры сортировки устанавливаются для первого столбца с использованием: в качестве разделителя столбцов, числовой сортировки и сортировки в обратном порядке.


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.