第十三章 对文本进行排序、单一和重复操作:sort命令、uniq命令

前端之家收集整理的这篇文章主要介绍了第十三章 对文本进行排序、单一和重复操作:sort命令、uniq命令前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

第十三章 对文本进行排序、单一和重复操作:sort命令、uniq命令

sort命令

名字解释

sort命令 它将文件进行排序,并将排序结果标准输出。sort命令即可以从特定的文件,也可以从stdin中获取输入。

语法

@H_404_10@sort (选项) (参数)

选项

  • -b:忽略每行前面开始出的空格字符;
  • -c:检查文件是否已经按照顺序排;
  • -d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符;
  • -f:排序时,将小写字母视为大写字母;
  • -i:排序时,除了040-176之间的ASCII字符外,忽略其他的字符;
  • -m:将几个排序号的文件进行合并;
  • -M:将前面3个字母依照月份的缩写进行排序;
  • -n:依照数值的大小排序;
  • -o:将排序后的结果存入指定的文件
  • -r:以相反的顺序来排序;
  • -t:指定排序时所用的栏位分隔字符;
  • +<起始栏位>-<结束栏位>:以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
  • -u或--unique:跟-c意思是类似,但是不打印相同的行。

参数

文件:指定待排序的文件列表。

实例

sort将文件/文本的每一行作为一个单位,相互比较,比较原则是从首字符向后,一次按照ASCII码值进行比较,最后将他们按升序输出

@H_404_10@[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

忽略相同的行

@H_404_10@排序 忽略相同的行: [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指定栏位分隔符为冒号

@H_404_10@[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选项的具体语法格式:

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

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

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

@H_404_10@[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个字母进行排序,如果有相同的就按照工资进行降序排序:

@H_404_10@[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命令

名字解释

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

语法

@H_404_10@uniq (选项) (参数)

选项

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

参数

输入文件:指定要去除的重复行文件。如果不指定选项,则从标准读取数据;

输出文件:指定要去除重复行后的内容要写入的输出文件。如果不指定选项,则将内容显示到标准输出设备。

实例

删除重复行:

@H_404_10@[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

显示单一行

@H_404_10@#方法一: [root@ceshi ~]# uniq -u repeat.txt bbbbbbbbbbbbbb bbbbbbbbbb cccccccccccccc cccccccc #方法二: [root@ceshi ~]# sort repeat.txt | uniq -u bbbbbbbbbb bbbbbbbbbbbbbb cccccccc cccccccccccccc

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

@H_404_10@[root@ceshi ~]# sort repeat.txt | uniq -c 2 aaaaaaaaaaaa 1 bbbbbbbbbb 1 bbbbbbbbbbbbbb 1 cccccccc 1 cccccccccccccc 2 dddddddddddd

文件中找出重复的行:

@H_404_10@[root@ceshi ~]# sort repeat.txt | uniq -d aaaaaaaaaaaa dddddddddddd

猜你在找的设计模式相关文章