我是靠谱客的博主 坚定火,最近开发中收集的这篇文章主要介绍gnu sort命令多列排序,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

有时候,要对一行中的某列字段进行排序,这时可以用-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


这里,-t "|" 指定字段的分隔符为 "|"

-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


这里,从第二列的1开始到行尾都参与排序,先对第1位的字符排序,2排在最后一行,再比较第二位字符,因为 "|" 的ASCII值大于数字的ASCII值,所以 1|排在第三行。


如果要同时进行多列排序,先按第二列的数字大小顺序排序,再按第三列的数字大小倒序排序,这时要使用多个-k选项

先修改原文件:

$ 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


这里,r表示倒序

如果要实现先按第二列的数字大小排序,再按第一列的月份顺序倒序排序 则:

$ 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


这里,对第一列的第三个字符"n"开始到第三列第二个字符结束的字符串进行排序。


看完以上这些,应该就对sort多列排序应用自如了。




最后

以上就是坚定火为你收集整理的gnu sort命令多列排序的全部内容,希望文章能够帮你解决gnu sort命令多列排序所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(53)

评论列表共有 0 条评论

立即
投稿
返回
顶部