最近在学习shell脚本编程时,看到一些脚本语句当中有许多使用sort命令的语句,上网搜索了一些资料,现在总结一下:
sort 命令的意思很明显就是为了排序,通常我们使用sort排序的基本参数如下:
1 简单的排序
root@jiangjian-K42JZ:/home/jiangjian/sh# cat facebook.txt
guge 50 3000
baidu 100 5000
sohu 100 4500
google 110 5000
root@jiangjian-K42JZ:/home/jiangjian/sh# sort facebook.txt
baidu 100 5000
google 110 5000
guge 50 3000
sohu 100 4500
root@jiangjian-K42JZ:/home/jiangjian/sh#
这里是按照字符为序进行排列的,这也是sort默认的工作方式,你可以改变
2 对数字进行排序 ------使用参数-n
root@jiangjian-K42JZ:/home/jiangjian/sh# cat data
32
24
3
114
11
31
41
root@jiangjian-K42JZ:/home/jiangjian/sh# sort -n data
3
11
24
31
32
41
114
提示:如果你没有指定以数字大小来排序,则结果如下:
root@jiangjian-K42JZ:/home/jiangjian/sh# cat data
32
24
3
114
11
31
41
root@jiangjian-K42JZ:/home/jiangjian/sh# sort data
11
114
24
3
31
32
41
root@jiangjian-K42JZ:/home/jiangjian/sh#
因为sort它还是按照字符来排序的,所以在这里114会小于24
3 去掉冗余行 (使用 -u 参数)
root@jiangjian-K42JZ:/home/jiangjian/sh# cat data
11
32
24
3
114
11
31
41
root@jiangjian-K42JZ:/home/jiangjian/sh# sort -n -u data
3
11
24
31
32
41
114
4 制定特定段进行比较 (使用-k 参数)
详解: - k n 其中n表示的是该行当中的第n的段 ,其中使用 -t ' ' 可以指定每行内的段分隔符,下面例子就是用的是空格键。
root@jiangjian-K42JZ:/home/jiangjian/sh# cat data
bob 2 178
Jim 1 179
Tom 3 178
root@jiangjian-K42JZ:/home/jiangjian/sh# sort -n -t ' ' -k 2 data //对第二个段进行排序
Jim 1 179
bob 2 178
Tom 3 178
root@jiangjian-K42JZ:/home/jiangjian/sh#
5 将排序的结果重定向到文件当中 (使用 -o 参数)
正常情况下sort的排序结果都是输出的屏幕上面,也即stdout,可以使用输出重定向到文件当中(>>),但是如果使用这种方式到自己的原文件当中,就存在问题;
root@jiangjian-K42JZ:/home/jiangjian/sh# cat data
bob 2 178
Jim 1 179
Tom 3 178
root@jiangjian-K42JZ:/home/jiangjian/sh# sort -n -t ' ' -k 2 data >data
root@jiangjian-K42JZ:/home/jiangjian/sh# cat data
root@jiangjian-K42JZ:/home/jiangjian/sh#
可以发现data文件当中的内容都不见了。现在使用-o 参数查看结果:
root@jiangjian-K42JZ:/home/jiangjian/sh# cat data
bob 2 178
Jim 1 179
Tom 3 178
root@jiangjian-K42JZ:/home/jiangjian/sh# sort -n -t ' ' -k 2 data -o data
root@jiangjian-K42JZ:/home/jiangjian/sh# cat data
Jim 1 179
bob 2 178
Tom 3 178