linux之排序sort命令详解linux之排序sort命令
sort排序规则:
以⾏为单位,每⼀⾏作为⼀个字符串
按照字符串的⽐较规则,⾸字母开始依次向后按ASCII码值进⾏⽐较
结果默认升序输出
1. 简单排序
[root@linuxforliuhj test]#
aaa:cde
bbb:dse
ccc:123
abc:rew
acb:1we
111:fdf
222:esa
333:iud
[root@linuxforliuhj test]#
111:fdf
222:esa
333:iud
aaa:cde
abc:rew
acb:1we
bbb:dse
ccc:123
使⽤sort进⾏简单排序,⾸字母开始依次进⾏⽐较。
2. 排序后去除重复的⾏,使⽤参数-u(unique)
[root@linuxforliuhj test]#
aaa:cde
aaa:cde
bbb:dse
ccc:123
abc:rew
abc:rew
abc:rew
acb:1we
111:fdf
222:esa
333:iud
[root@linuxforliuhj test]# sort -
111:fdf
222:esa
333:iud
aaa:cde
abc:rew
acb:1we
bbb:dse
ccc:123
排序后将重复的⾏aaa:cde和abc:rew去重只保留⼀⾏。
3.默认排序为升序排序,使⽤参数-r进⾏降序排序
[root@linuxforliuhj test]#
aaa:cde
aaa:cde
bbb:dse
ccc:123
abc:rew
abc:rew
abc:rew
acb:1we
111:fdf
222:esa
333:iud
[root@linuxforliuhj test]# sort -u -
ccc:123
bbb:dse
acb:1we
abc:rew
aaa:cde
333:iud
222:esa
111:fdf
进⾏降序排序,同时去除重复项。
4.将排序结果输出到指定⽂件,使⽤参数-o(out)
[root@linuxforliuhj test]# sort -u - -o /test/
[root@linuxforliuhj test]# cat
ccc:123
bbb:dse
acb:1we
abc:rew
aaa:cde
333:iud
222:esa
111:fdf
将排序的结果输出到⽂件⽂件中,如果输出⽂件不存在会⾃动创建。同时也可以使⽤重定向符号进⾏输出。
[root@linuxforliuhj test]# sort -u - > /test/
[root@linuxforliuhj test]# cat
ccc:123
bbb:dse
acb:1we
abc:rew
aaa:cde
333:iud
222:esa
111:fdf
参数-o和重定向符号的唯⼀区别:
当使⽤重定向符号将排序结果重定向输出回源⽂件进⾏覆盖时,会出错,源⽂件会被清空。
当使⽤-o参数时,则能够正常覆盖回源⽂件。
[root@linuxforliuhj test]# sort -u - >/
[root@linuxforliuhj test]# ll -d /
-rw-r--r--.1 root root 0 Oct 2520:06/
[root@linuxforliuhj test]#
[root@linuxforliuhj test]#
[root@linuxforliuhj test]# sort -u - -o /
[root@linuxforliuhj test]#
ccc:123
bbb:dse
acb:1we
abc:rew
aaa:cde
333:iud
222:esa
111:fdf
[root@linuxforliuhj test]#
5.以数值进⾏⽐较,⽽并⾮字符串,使⽤参数-n(number)
[root@linuxforliuhj test]# cat
12322
54
735
9
[root@linuxforliuhj test]#
[root@linuxforliuhj test]# sort
12322
54
735
9
[root@linuxforliuhj test]# sort -n
9
54
735
12322
未使⽤-n参数则从⾸字母开始依次进⾏排序;使⽤-n参数后则按照数值进⾏排序;此参数只适⽤于纯数字字符串。
6.将每⼀⾏按照指定字符分割以后,选择其中的某⼀列进⾏排序,使⽤-t参数指定分割符,使⽤-k参数指定按照分割后的哪⼀列进⾏排序。
[root@linuxforliuhj test]#
asd:34w:dsw
ccc:123:343
bbb:123:dfe
aab:1we:hiu
abc:lwe:htt
aaa:cde:lpu
333:esa:qas
222:esa:ase
111:fdf:cxs
以:分割每⼀⾏并按照第1列进⾏排序
[root@linuxforliuhj test]# sort -t ':' -k
111:fdf:cxs
222:esa:ase
333:esa:qas
aaa:cde:lpu
aab:1we:hiu
abc:lwe:htt
asd:34w:dsw
bbb:123:dfe
ccc:123:343
以:分割每⼀⾏并按照第2列进⾏排序
[root@linuxforliuhj test]# sort -t ':' -k ccc:123:343
bbb:123:dfe
aab:1we:hiu
asd:34w:dsw
aaa:cde:lpu
222:esa:ase
333:esa:qas
111:fdf:cxs
abc:lwe:htt
以:分割每⼀⾏并按照第3列进⾏排序
[root@linuxforliuhj test]# sort -t ':' -k ccc:123:343
222:esa:ase
111:fdf:cxs
bbb:123:dfe
asd:34w:dsw
aab:1we:hiu
abc:lwe:htt
aaa:cde:lpu
333:esa:qas
7.sort命令适⽤于管道符
[root@linuxforliuhj test]#
ccccc
bdsdsad
adsfwe
gdgsdflinux重定向
we
w
dsafswqeqw
jhhtyty
[root@linuxforliuhj test]# | sort
adsfwe
bdsdsad
ccccc
dsafswqeqw
gdgsdf
jhhtyty
w
we
[root@linuxforliuhj test]# | sort -r we
w
jhhtyty
gdgsdf
dsafswqeqw
ccccc
bdsdsad
adsfwe
[root@linuxforliuhj test]#
8.注意
注意:
【1】sort还有⼀些其他的不常⽤的参数,例如-f,-b , -c, -C等
【2】sort默认是使⽤-b参数的,即默认删除每⼀⾏之前的空格,从第⼀个⾮空格数据开始⽐较
[root@linuxforliuhj test]#
hello this is
hello this is
hellothis is
hello this a
[root@linuxforliuhj test]#
hello this a
hello this is
hello this is
hellothis is
可以看出默认的sort命令忽略每⼀⾏第⼀个字符之前的空格,⽽并⾮整⾏所有的空格!
9.忽略⼤⼩写参数-f引发的奇怪现象
[root@linuxforliuhj test]# cat hello.sh
A
a
B
b
d
D
e
E
[root@linuxforliuhj test]# sort hello.sh
a
A
b
B
d
D
e
E
[root@linuxforliuhj test]# sort -f hello.sh
A
a
B
b
D
d
E
e
⽬前查了很多资料还不清楚具体是什么原因,所以尽量不要⽤-f参数,可以使⽤tr等命令进⾏⼤⼩写替换后再排序!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。