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

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

22.06.2011 03:15:48 Просмотров 31 Источник

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

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

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

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

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

У вопроса есть решение - Посмотреть?

https://stackoverflow.com/questions/6438896/sorting-data-based-on-second-column-of-a-file#comment55471840_6438896
Суперсеть: пользовательский разделитель: stackoverflow.com/questions/1037365/…

Ответы - Сортировка данных по второму столбцу файла / Sorting data based on second column of a file

Ignacio Vazquez-Abrams

22.06.2011 03:17:16

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

sort ... -k 2,2 ...
https://stackoverflow.com/questions/6438896/sorting-data-based-on-second-column-of-a-file/6438925#comment7557663_6438925
Вы также должны использовать-n для сортировки по возрасту (числовая сортировка). В противном случае " 11 "будет предшествовать "2".
Является ответом!
Matt Ryall

22.06.2011 03:18:37

Вы можете использовать команду 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
https://stackoverflow.com/questions/6438896/sorting-data-based-on-second-column-of-a-file/6438940#comment91101136_6438940
также обратите внимание, что использование -hвместо-nбудет сортировать читаемые человеком значения, такие как 2Gили 3K, а также числа, разделенные запятыми, например 1,234.5
https://stackoverflow.com/questions/6438896/sorting-data-based-on-second-column-of-a-file/6438940#comment92066423_6438940
Столкнулся с проблемой "неправильного" заказа. Обратите внимание на человека " * * * предупреждение * * * локаль, заданная средой, влияет на порядок сортировки. Установите LC_ALL=C, чтобы получить традиционный порядок сортировки, использующий собственные байтовые значения."(для случая совпадения строк без -n)
https://stackoverflow.com/questions/6438896/sorting-data-based-on-second-column-of-a-file/6438940#comment98223278_6438940
Это не учитывает пробелы в первом столбце и не работает, если есть больше столбцов после второго, так как-k читается до конца строки. Предположим, что это файл TSV, лучшим решением является sort -t$'\t' -k2 -n FILE
https://stackoverflow.com/questions/6438896/sorting-data-based-on-second-column-of-a-file/6438940#comment102410193_6438940
возможно, Вам потребуется указать разделитель с помощью параметра-t
DCurro

17.12.2015 09:49:58

Решение:

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

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

https://stackoverflow.com/questions/6438896/sorting-data-based-on-second-column-of-a-file/34342089#comment77175266_34342089
@Angelo этот ответ был предположительно опубликован спустя годы после того, как вы приняли ответ на этот вопрос, но рассматривали ли вы его как новый принятый ответ?
Saurabh

20.03.2018 07:03:25

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

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

- r можно использовать для получения данных в порядке убывания.
- n для числовой сортировки
-k, -- key=POS1 [, POS2] , где k-столбец в файле
Для нисходящего порядка ниже приведен код

sort -t$'\t' -k2 -rn
Закрыть X