有时候,要对一行中的某列字段进行排序,这时可以用-t选项指定字段分隔符,用-k start[,end] 来指定列,列从1开始编
原文件:
$ cat test3.txt
Jan|1|100
Feb|2|200
Nov|11|80
Oct|10|90
要对第二列按数字大小排序
$ sort -t "|" -k 2,2n test3.txt
Jan|1|100
Feb|2|200
Oct|10|90
Nov|11|80
-k 2,2 代表对第二列进行排序,n修饰符代表按数字大小排序。
如果没有n,就会按字符串进行排序:
$ sort -t "|" -k 2,2 test3.txt
Jan|1|100
Oct|10|90
Nov|11|80
Feb|2|200
这里,第二列的数字被作为字符串进行排序。
-k 选项的参数格式是 -k start[,end],注意,这里如果省略了end,就会从start开始一直比较到行尾。
$ sort -t "|" -k 2 test3.txt
Oct|10|90
Nov|11|80
Jan|1|100
Feb|2|200
先修改原文件:
$ cat test3.txt
Jan|1|100
Feb|2|200
Nov|1|280
Oct|2|90
$ sort -t "|" -k 2,2n -k3,3nr test3.txt
Nov|1|280
Jan|1|100
Feb|2|200
Oct|2|90
如果要实现先按第二列的数字大小排序,再按第一列的月份顺序倒序排序 则:
$ sort -t "|" -k 2,2n -k1,1Mr test3.txt
Nov|1|280
Jan|1|100
Oct|2|90
Feb|2|200
这里,M修饰符用于按英文简写的月份排序,Jan - Feb - ....... Nov - Dec。
利用-k选项,还可以实现跨字段跨字符的排序
修改源文件为:
$ cat test3.txt
Jan|2|300
Fen|2|250
$ sort -t "|" -k 1.3,3.2 test3.txt
Fen|2|250
Jan|2|300
看完以上这些,应该就对sort多列排序应用自如了。
最后
以上就是坚定火最近收集整理的关于gnu sort命令多列排序的全部内容,更多相关gnu内容请搜索靠谱客的其他文章。
发表评论 取消回复