标签:对文本进行排序、单一和重复操作 sort命令 uniq命令
第十三章 对文本进行排序、单一和重复操作:sort命令、uniq命令sort命令 它将文件进行排序,并将排序结果标准输出。sort命令即可以从特定的文件,也可以从stdin中获取输入。
sort (选项) (参数)
文件:指定待排序的文件列表。
sort将文件/文本的每一行作为一个单位,相互比较,比较原则是从首字符向后,一次按照ASCII码值进行比较,最后将他们按升序输出。
[root@ceshi ~]# cat sort.txt
aaa:10:1.1
ccc:30:3.3
ddd:40:4.4
bbb:20:2.2
eee:50:5.5
eee:50:5.5
排序后:
[root@ceshi ~]# sort sort.txt
aaa:10:1.1
bbb:20:2.2
ccc:30:3.3
ddd:40:4.4
eee:50:5.5
eee:50:5.5
忽略相同的行
排序 忽略相同的行:
[root@ceshi ~]# sort -u sort.txt
aaa:10:1.1
bbb:20:2.2
ccc:30:3.3
ddd:40:4.4
eee:50:5.5
或者
[root@ceshi ~]# uniq sort.txt
aaa:10:1.1
ccc:30:3.3
ddd:40:4.4
bbb:20:2.2
eee:50:5.5
sort的-n、-r、-k、-t选项的使用:
-n:是按照数字大小排序,
-r是以相反顺序,
-k是指定需要排序的栏位,
-t指定栏位分隔符为冒号
[root@ceshi ~]# cat sort2.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列按照数字从小到大顺序排列:
[root@ceshi ~]# sort -nk 2 -t: sort2.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列数字从大到小顺序排列
[root@ceshi ~]# sort -nk 3 -t: sort2.txt
AAA:BB:CC
aaa:30:1.6
bbb:10:2.5
ccc:50:3.3
ddd:20:4.2
eee:60:5.1
eee:40:5.4
#-n:是按照数字大小排序,-r是以相反顺序,-k是指定需要排序的栏位,-t指定栏位分隔符为冒号
-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(零),也是表示结尾到“域尾”。
例子:从公司英文名称的第二个字母开始进行排序
[root@ceshi ~]# cat company.txt
sohu 100 3000
google 100 4000
baidu 105 3000
guge 105 2500
#从公司英文名称的第二个字母开始进行排序
[root@ceshi ~]# sort -t ‘ ‘ -k 1.2 company.txt
baidu 105 3000
sohu 100 3000
google 100 4000
guge 105 2500
#从公司英文名称的第三个字母开始进行排序
[root@ceshi ~]# sort -t ‘ ‘ -k 1.3 company.txt
guge 105 2500
sohu 100 3000
baidu 105 3000
google 100 4000
第1个域 第2个域 第3个域
使用-k 1.2 ,表示对第1个域的第2个字符进行公司名字的排序。
只针对公司英文名称的第2个字母进行排序,如果有相同的就按照工资进行降序排序:
[root@ceshi ~]# sort -t ‘ ‘ -k 1.2,1.2 -nrk 3,3 company.txt
google 100 4000
sohu 100 3000
baidu 105 3000
guge 105 2500
-k 1.2,1.2 代表只针对第2个字母进行排序。如果写成-k 1.2那,就意味着将对从第2个字母起到本域最后一个字符为止的字符串进行排序。
-k 3,3 代表只针对第3个域进行排序。如果写成-k 3那,就意味着将对从第3个域开始字母起到本域最后一个字符为止的字符串进行排序。
uniq命令 用于报告或忽略文件中的重复行,一般与sort命令结合使用。
uniq (选项) (参数)
输入文件:指定要去除的重复行文件。如果不指定选项,则从标准读取数据;
输出文件:指定要去除重复行后的内容要写入的输出文件。如果不指定选项,则将内容显示到标准输出设备。
删除重复行:
[root@ceshi ~]# cat repeat.txt
aaaaaaaaaaaa
aaaaaaaaaaaa
bbbbbbbbbbbbbb
bbbbbbbbbb
cccccccccccccc
cccccccc
dddddddddddd
dddddddddddd
#方法一:
[root@ceshi ~]# uniq repeat.txt
aaaaaaaaaaaa
bbbbbbbbbbbbbb
bbbbbbbbbb
cccccccccccccc
cccccccc
dddddddddddd
#方法二:
[root@ceshi ~]# sort repeat.txt | uniq
aaaaaaaaaaaa
bbbbbbbbbb
bbbbbbbbbbbbbb
cccccccc
cccccccccccccc
dddddddddddd
#方法三:
[root@ceshi ~]# sort -u repeat.txt
aaaaaaaaaaaa
bbbbbbbbbb
bbbbbbbbbbbbbb
cccccccc
cccccccccccccc
dddddddddddd
只显示单一行
#方法一:
[root@ceshi ~]# uniq -u repeat.txt
bbbbbbbbbbbbbb
bbbbbbbbbb
cccccccccccccc
cccccccc
#方法二:
[root@ceshi ~]# sort repeat.txt | uniq -u
bbbbbbbbbb
bbbbbbbbbbbbbb
cccccccc
cccccccccccccc
统计各行在文件中出现的次数:
[root@ceshi ~]# sort repeat.txt | uniq -c
2 aaaaaaaaaaaa
1 bbbbbbbbbb
1 bbbbbbbbbbbbbb
1 cccccccc
1 cccccccccccccc
2 dddddddddddd
在文件中找出重复的行:
[root@ceshi ~]# sort repeat.txt | uniq -d
aaaaaaaaaaaa
dddddddddddd
第十三章 对文本进行排序、单一和重复操作:sort命令、uniq命令
标签:对文本进行排序、单一和重复操作 sort命令 uniq命令
原文地址:http://blog.51cto.com/506554897/2118604