首页 > 解决方案 > Bash Shell:如何按最后一列的值排序,但忽略文件的标题?

问题描述

文件

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

标签: bashsortingunix

解决方案


您只想按最后一列排序,但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-

推荐阅读