Bash Оболочка: как сортировать по значениям в последнем столбце, но игнорируя заголовок файла? - PullRequest
0 голосов
/ 09 апреля 2020

файл

ID First_Name Last_Name(s) Average_Winter_Grade
323 Popa Arianna 10
317 Tabarcea Andreea 5.24
326 Balan Ionut 9.935
327 Balan Tudor-Emanuel 8.4
329 Lungu Iulian-Gabriel 7.78
365 Brailean Mircea 7.615
365 Popescu Anca-Maria 7.38
398 Acatrinei Andrei 8

Как отсортировать его по последнему столбцу, кроме заголовка?

Это то, что файл должен выглядеть после изменений:

ID First_Name Last_Name(s) Average_Winter_Grade
323 Popa Arianna 10
326 Balan Ionut 9.935
327 Balan Tudor-Emanuel 8.4
398 Acatrinei Andrei 8
329 Lungu Iulian-Gabriel 7.78
365 Brailean Mircea 7.615    
365 Popescu Anca-Maria 7.38
317 Tabarcea Andreea 5.24

Ответы [ 2 ]

2 голосов
/ 09 апреля 2020

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

Игнорирование заголовка на данный момент (хотя это часто будет работать само по себе):

 awk '{print $NF, $0 | "sort -nr" }' input | cut -d ' ' -f 2-

Если вы нужно урезать порядок (например, он смешивается в сортировке), вы можете делать такие вещи, как:

< input awk 'NR==1; NR>1 {print $NF, $0 | "sh -c \"sort -nr | cut -d \\\  -f 2-\"" }'

или

awk 'NR==1{ print " ", $0} NR>1 {print $NF, $0 | "sort -nr" }' OFS=\; input | cut -d \; -f 2-
2 голосов
/ 09 апреля 2020

Если это всегда четвертый столбец:

head -n 1 file; tail -n +2 file | sort -n -r -k 4,4

Если все, что вы знаете, это последний столбец:

head -n 1 file; tail -n +2 file | awk '{print $NF,$0}'  | sort -n -r | cut  -f2- -d' '
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...