Linux

sort

2020-02-19  本文已影响0人  云养江停

sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,依次按ASCII码值进行比较,最后将他们按升序输出。


如果有一个文件facebook.txt的内容是这样:

banana:30:5.5

apple:10:2.5

pear:90:2.3

orange:20:3.4

这个文件有三列,列与列之间用冒号隔开了,第一列表示水果类型,第二列表示水果数量,第三列表示水果价格。

那么我想以水果数量来排序,也就是以第二列来排序,如何利用sort实现?

幸好,sort提供了-t选项,后面可以设定间隔符。(是不是想起了cut和paste的-d选项,共鸣~~)

指定了间隔符之后,就可以用-k来指定列数了。

sort -n -k 2 -t : facebook.txt


如果有一个文件facebook.txt的内容是这样:

baidu 100 5000

guge 50 3000

sohu 100 4500

第一个域是公司名称,第二个域是公司人数,第三个域是员工平均工资。

我想按照员工工资降序排序,如果员工人数相同的,则按照公司人数升序排序

sort -n -t ‘ ‘ -k 3r -k 2 facebook.txt

此处有使用了一些小技巧,你仔细看看,在-k 3后面偷偷加上了一个小写字母r,表示逆序。因为sort默认是按照升序排序的,所以此处需要加上r表示第三个域(员工平均工资)是按照降序排序。此处你还可以加上n,就表示对这个域进行排序时,要按照数值大小进行排序,举个例子吧:

$ sort -t ‘ ‘ -k 3nr -k 2n facebook.txt

baidu 100 5000

google 110 5000

sohu 100 4500

guge 50 3000

看,我们去掉了最前面的-n选项,而是将它加入到了每一个-k选项中了。

详情:https://www.cnblogs.com/51linux/archive/2012/05/23/2515299.html

上一篇 下一篇

猜你喜欢

热点阅读