linux sort排序

创建文件sortfile
ccc
aaa
bbb
zzz
eee
fff
ttt
ggg
aaa
bac
cac

1.按字母顺序排序
[limaoyuan@localhost files]# cat sortfile | sort
aaa
aaa
bac
bbb
cac
ccc
eee
fff
ggg
ttt
zzz

2.以第1段的第2个字母按字母的顺序排序
[limaoyuan@localhost files]# cat sortfile | sort -k1.2
aaa
aaa
bac
cac
bbb
ccc
eee
fff
ggg
ttt
zzz

----------------------------------------

再创建文件 sortfile2
a,b,c
b,c,a
c,d,f
z,a,b
e,d,b

1.sort命令默认是以空格做为每一段的分界符,同时我们可以加-t参数来改变分界符,
如上面的文件是用逗号分隔的,我们想以第2个段来进行排序,那么要用到-k
[limaoyuan@localhost files]# cat sortfile2 | sort -k2 -t","
z,a,b
a,b,c
b,c,a
e,d,b
c,d,f

格式也可以是下面这样,一个意思,-t的参数可以加引号也可以不加
[limaoyuan@localhost files]# sort -t, -k2  sortfile2
z,a,b
a,b,c
b,c,a
e,d,b
c,d,f

2.将排序结果输出到sortedfile文件中
[limaoyuan@localhost files]# cat sortfile2 | sort -t","  > sortedfile
打开sortedfile
[limaoyuan@localhost files]# cat sortedfile
a,b,c
a,d,b
b,c,a
c,d,f
z,a,b

3.去重复项的使用,对-u参数的巨大疑问
[root@localhost files]# sort -t, -k2 -u sortfile2  //想去掉第2段中的重复项,可结果是下面这样,明显没有去掉重复的d
z,a,b
a,b,c
b,c,a
e,d,b
c,d,f
但是,下面去掉第3个字段的重复项,显然是生效了,至今不太明白
[root@localhost files]# sort -t, -k3 -u sortfile2
b,c,a
z,a,b
a,b,c
c,d,f
但但是,下面3种可以完美
[root@localhost files]# cat sortfile2 | sort  -u -k1,1 -t,
a,b,c
b,c,a
c,d,f
z,a,b
[root@localhost files]# cat sortfile2 | sort  -u -k2,2 -t,
z,a,b
a,b,c
b,c,a
c,d,f
[root@localhost files]# cat sortfile2 | sort  -u -k3,3 -t,
b,c,a
z,a,b
a,b,c
c,d,f
就上面一连串对-k的疑问,详细看了看资料,众同解释各不一样,总之-k如果只带一个参数
如-k2,那么匹配的范围是第2段一直到最后一段,而不只是针对第2段自己,如果加上-k2.2就是对-k2自己来匹配。不见得对,姑且先这么理解着吧。


另附, -r 倒序 -n以整数来比较排序 -f不分字母大小写 -b忽略开头空格
-u只保留相同键值的记录,只留中的第一条,只有键值字段是最重要的时候才会使用,通常用于去重

猜你喜欢

转载自shadowsocks.iteye.com/blog/900926