Сортировка данных по второму столбцу файла - PullRequest
170 голосов
/ 22 июня 2011

У меня есть файл из двух столбцов и n количество строк.

столбец 1 содержит names и столбец2 age.

Я хочу отсортировать содержимое этого файла в порядке возрастания на основе age (во втором столбце).

Результат должен отображать name самого молодого человека вместе с name, а затем второго самого молодого человека и так далее ...

Любые предложения для однострочного оболочки или скрипта bash.

Ответы [ 4 ]

273 голосов
/ 22 июня 2011

Вы можете использовать команду sort :

sort -k2 -n yourfile

-n, --numeric-sort сравнить по числовому значению строки

Например:

$ cat ages.txt 
Bob 12
Jane 48
Mark 3
Tashi 54

$ sort -k2 -n ages.txt 
Mark 3
Bob 12
Jane 48
Tashi 54
73 голосов
/ 17 декабря 2015

Решение:

sort -k 2 -n filename

более подробно написано как:

sort --key 2 --numeric-sort filename


Пример:

$ cat filename
A 12
B 48
C 3

$ sort --key 2 --numeric-sort filename 
C 3
A 12
B 48

Пояснение:

  • -k # - этот аргумент указывает первый столбец, который будет использоваться для сортировки. (обратите внимание, что столбец здесь определен как поле с пробелами; аргумент -k5 будет сортироваться, начиная с пятого поля в каждой строке, а не с пятого символа в каждой строке)

  • -n - этот параметр указывает «числовую сортировку», означающую, что столбец должен интерпретироваться как строка чисел, а не текст.


Подробнее:

Другие распространенные опции:

  • -r - эта опция меняет порядок сортировки. Его также можно записать как - обратный .
  • -i - эта опция игнорирует непечатные символы. Его также можно записать как - игнорировать без печати .
  • -b - эта опция игнорирует начальные пробелы, что удобно, поскольку для определения количества строк используются пробелы. Его также можно записать как - игнорировать ведущие пробелы .
  • -f - эта опция игнорирует регистр букв. «А» == «а». Его также можно записать как - игнорировать регистр .
  • -t [новый разделитель] - эта опция заставляет предварительную обработку использовать оператор, отличный от пробела. Его также можно записать как --field-separator.

Существуют и другие варианты, но это наиболее распространенные и полезные, которые я часто использую.

5 голосов
/ 20 марта 2018

Для значений, разделенных табуляцией, можно использовать приведенный ниже код

sort -t$'\t' -k2 -n

-r можно использовать для получения данных в порядке убывания.
-n для числовой сортировки
Для значения в порядке убываниякод

sort -t$'\t' -k2 -rn
3 голосов
/ 22 июня 2011

Использование sort.

sort ... -k 2,2 ...
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...