您的位置:首页 > 运维架构 > Linux

【Linux】基础之sort&uniq命令

2018-02-12 20:44 246 查看

sort命令用于将文本文件内容加以排序
sort可以针对文本文件内容,以行为单位来排序。

参数:
-b:忽略每行前面开始出现的空格字符
-c:检查文件是否已经按照顺序排序
-d:排序时,处理英文字母、数字及空格字符外,忽略其它字符。
-f:排序时,将小写字母视为大写字母
-i:排序时,除了040至176之间的ASCII字符外
-m:将几个排序好的文件进行合并
-M:将前面三个字母依照月份的缩写进行排序
-n:依照数值大小进行排序
-o<输出文件>:将排序后的结果存入指定文件
-r:以相反的顺序来排序
-t<分割字符>:指定排序时所用的分隔符
+<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位
--help 显示帮助。

实例:
1.以ASCII顺序排序文件test1

sort test1

2.忽略文件相同行

sort -u test1
或
uniq test1

3.sort -n -r -k -t的使用
先查看一个文件sort.txt

cat sort.txt
AAA:BB:CC
aaa:30:1.6
ccc:50:3.3
ddd:20:4.2
bbb:10:2.5
eee:40:5.4
eee:60:5.1

#将BB列按照数字从小到大顺序排列:

sort -nk 2 -t: sort.txt
AAA:BB:CC
bbb:10:2.5
ddd:20:4.2
aaa:30:1.6
eee:40:5.4
ccc:50:3.3
eee:60:5.1

#将CC列数字从大到小顺序排列:

sort -nrk 3 -t: sort.txt
eee:40:5.4
eee:60:5.1
ddd:20:4.2
ccc:50:3.3
bbb:10:2.5
aaa:30:1.6
AAA:BB:CC

-n是按照数字大小排序,-r是以相反顺序,-k是指定需要爱排序的栏位,-t指定栏位分隔符为冒号

-k选项的具体语法格式:

-k选项的语法格式:

FStart.CStart Modifie,FEnd.CEnd Modifier
-------Start--------,-------End--------
FStart.CStart 选项  ,  FEnd.CEnd 选项

这个语法格式可以被其中的逗号,分为两大部分,Start部分和End部分。Start部分也由三部分组成,其中的Modifier部分就是我们之前说过的类似n和r的选项部分。我们重点说说Start部分的FStart和C.Start。C.Start也是可以省略的,省略的话就表示从本域的开头部分开始。FStart.CStart,其中FStart就是表示使用的域,而CStart则表示在FStart域中从第几个字符开始算“排序首字符”。同理,在End部分中,你可以设定FEnd.CEnd,如果你省略.CEnd,则表示结尾到“域尾”,即本域的最后一个字符。或者,如果你将CEnd设定为0(零),也是表示结尾到“域尾”。

1.从公司英文名称的第二个字母开始进行排序:

sort -t ' ' -k 1.2 book.txt  ##以空格为分隔符
baidu 100 5000
sohu 100 4500
google 110 5000
guge 50 3000

使用k 1.2表示第一个域的第二个字符开始到本域的最后一个字符为止的字符串进行排序。sohu与google第二个字符相同,所以按照第三个字符来对这两字符谁前谁后排序。

2.只针对公司英文名称的第二个字母进行排序,如果相同的按照员工工资进行降序排序:

sort -t ' ' -k 1.2,1.2 -nrk 3,3 book.txt

由于只针对1.2进行排序,所以这里用1.2,1.2来表示

uniq命令用于报告或忽略文件中的重复行,一般与sort命令结合使用。

选项:
-c或——count:在每列旁边显示该行重复出现的次数;
-d或--repeated:仅显示重复出现的行列;
-f<栏位>或--skip-fields=<栏位>:忽略比较指定的栏位;
-s<字符位置>或--skip-chars=<字符位置>:忽略比较指定的字符;
-u或——unique:仅显示出一次的行列;
-w<字符位置>或--check-chars=<字符位置>:指定要比较的字符。

实例:
删除重复行:

uniq file.txt
sort file.txt | uniq
sort -u file.txt

只显示单一行:

uniq -u file.txt
sort file.txt | uniq -u

统计各行在文件中出现的次数:

sort file.txt | uniq -c

在文件中找出重复的行:

sort file.txt | uniq -d

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: