it-roy-ru.com

Сортировка данных по второму столбцу файла

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

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

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

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

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

165
Angelo

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

Решение:

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 - эта опция меняет порядок сортировки. Он также может быть записан как - reverse.
  • - i - эта опция игнорирует непечатаемые символы. Его также можно записать как - ignore-nonprinting.
  • - b - эта опция игнорирует начальные пробелы, что удобно, так как пробелы используются для определения количества строк. Он также может быть записан как - ignore-lead-blanks.
  • - f - эта опция игнорирует регистр букв. "А" == "а". Его также можно записать как - ignore-case.
  • - t [новый разделитель] - эта опция заставляет предварительную обработку использовать оператор, отличный от пробела. Он также может быть записан как --field-separator.

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

70
DCurro

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

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

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

sort -t$'\t' -k2 -rn
5
Saurabh

Используйте sort.

sort ... -k 2,2 ...
3
Ignacio Vazquez-Abrams