Числовая сортировка и разделители полей
В многих реальных сценариях вам может понадобиться сортировать файлы, содержащие числовые значения или данные с несколькими полями. Команда sort
предоставляет параметры для таких сценариев.
Числовая сортировка
Создадим файл с числовыми значениями, чтобы изучить числовую сортировку:
- Создайте файл с именем
numbers.txt
:
cd ~/project
echo -e "10\n5\n100\n20\n1\n50" > numbers.txt
- Просмотрите содержимое файла:
cat numbers.txt
Вы должны увидеть:
10
5
100
20
1
50
- Если вы используете базовую команду
sort
для этого файла:
sort numbers.txt
Вывод будет следующим:
1
10
100
20
5
50
Обратите внимание, что это не правильный числовой порядок, потому что по умолчанию sort
обрабатывает каждую строку как текст. Строка "100" идет перед "20" в лексикографическом (словарном) порядке.
- Чтобы отсортировать по числам, используйте параметр
-n
:
sort -n numbers.txt
Теперь вы увидите правильный числовой порядок:
1
5
10
20
50
100
Сортировка файлов с несколькими полями
Часто файлы содержат несколько полей, разделенных разделителями, такими как запятые, табуляции или пробелы. Команда sort
позволяет указать, по какому полю нужно сортировать.
- Создайте CSV (Comma-Separated Values - значения, разделенные запятыми) файл с некоторыми примеровыми данными:
cd ~/project
echo -e "Name,Age,City\nAlice,28,New York\nBob,35,Los Angeles\nCarol,22,Chicago\nDavid,31,Boston\nEve,26,Seattle" > people.csv
- Просмотрите содержимое файла:
cat people.csv
Вы должны увидеть:
Name,Age,City
Alice,28,New York
Bob,35,Los Angeles
Carol,22,Chicago
David,31,Boston
Eve,26,Seattle
- Чтобы отсортировать этот файл по второму полю (Возраст), используйте параметр
-t
для указания разделителя полей (в данном случае запятая) и параметр -k
для указания номера поля:
sort -t, -k2,2n people.csv
Параметр -t,
устанавливает разделитель полей в виде запятой, а -k2,2n
сообщает sort
использовать второе поле для сортировки и рассматривать его как числовое значение.
Вывод должен быть следующим:
Name,Age,City
Carol,22,Chicago
Eve,26,Seattle
Alice,28,New York
David,31,Boston
Bob,35,Los Angeles
- Вы также можете отсортировать по третьему полю (Город) по алфавиту:
sort -t, -k3,3 people.csv
Вывод будет следующим:
Name,Age,City
David,31,Boston
Carol,22,Chicago
Bob,35,Los Angeles
Alice,28,New York
Eve,26,Seattle
Используя эти параметры, вы можете эффективно сортировать файлы с различными форматами данных в соответствии с вашими потребностями.