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

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

sort命令

名字解释

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

语法

sort (选项) (参数)

选项

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

参数

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

实例

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

[[email protected] ~]# 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

排序后:
[[email protected] ~]# 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

忽略相同的行

排序 忽略相同的行:
[[email protected] ~]# sort -u sort.txt
aaa:10:1.1
bbb:20:2.2
ccc:30:3.3
ddd:40:4.4
eee:50:5.5
或者
[[email protected] ~]# 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指定栏位分隔符为冒号

[[email protected] ~]# 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列按照数字从小到大顺序排列:
[[email protected] ~]# 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列数字从大到小顺序排列
[[email protected] ~]# 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部分的FStartC.StartC.Start也是可以省略的,省略的话就表示从本域的开头部分开始。FStart.CStart,其中FStart就是表示使用的域,而CStart则表示在FStart域中从第几个字符开始算“排序首字符”。同理,在End部分中,你可以设定FEnd.CEnd,如果你省略.CEnd,则表示结尾到“域尾”,即本域的最后一个字符。或者,如果你将CEnd设定为0(零),也是表示结尾到“域尾”。

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

[[email protected] ~]# cat company.txt
sohu 100 3000
google 100 4000
baidu 105 3000
guge 105 2500

#从公司英文名称的第二个字母开始进行排序
[[email protected] ~]# sort -t ‘ ‘ -k 1.2 company.txt
baidu 105 3000
sohu 100 3000
google 100 4000
guge 105 2500
#从公司英文名称的第三个字母开始进行排序
[[email protected] ~]# 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个字母进行排序,如果有相同的就按照工资进行降序排序:

[[email protected] ~]# 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命令结合使用。

语法

uniq (选项) (参数)

选项

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

参数

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

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

实例

删除重复行:

[[email protected] ~]# cat repeat.txt
aaaaaaaaaaaa
aaaaaaaaaaaa
bbbbbbbbbbbbbb
bbbbbbbbbb
cccccccccccccc
cccccccc
dddddddddddd
dddddddddddd

#方法一:
[[email protected] ~]# uniq repeat.txt
aaaaaaaaaaaa
bbbbbbbbbbbbbb
bbbbbbbbbb
cccccccccccccc
cccccccc
dddddddddddd
#方法二:
[[email protected] ~]# sort repeat.txt | uniq
aaaaaaaaaaaa
bbbbbbbbbb
bbbbbbbbbbbbbb
cccccccc
cccccccccccccc
dddddddddddd
#方法三:
[[email protected] ~]# sort -u repeat.txt
aaaaaaaaaaaa
bbbbbbbbbb
bbbbbbbbbbbbbb
cccccccc
cccccccccccccc
dddddddddddd

只显示单一行

#方法一:
[[email protected] ~]# uniq -u repeat.txt
bbbbbbbbbbbbbb
bbbbbbbbbb
cccccccccccccc
cccccccc

#方法二:
[[email protected] ~]# sort repeat.txt | uniq -u
bbbbbbbbbb
bbbbbbbbbbbbbb
cccccccc
cccccccccccccc

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

[[email protected] ~]# sort repeat.txt | uniq -c
      2 aaaaaaaaaaaa
      1 bbbbbbbbbb
      1 bbbbbbbbbbbbbb
      1 cccccccc
      1 cccccccccccccc
      2 dddddddddddd

在文件中找出重复的行:

[[email protected] ~]# sort repeat.txt | uniq -d
aaaaaaaaaaaa
dddddddddddd

原文地址:http://blog.51cto.com/506554897/2118604

时间: 2024-11-07 22:52:28

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

第十三章 解析文本

第十三章解析文本 结构化的文本格式,对我和机器来说,都具有可读性,在计算机界几乎从开始就流行,编程语言就是一个很好的示例,当然还有其他许多应用.解析文本,与前面一章"面向语言编程"是相关联的,因为,如果想要实现一种语言,不嵌入在 F# 中,那么,第一步就是要为这种格式创建解析器.然而,解析已有文本格式是有许多原因的,因此,,没有把它限制在解析语言这一章中.[ 也是这一章从原来第十二章中分出来的原因] 简单的文本格式,比如逗号分隔(comma separated values,CSV)格

正则表达式 ------排序三工具(sort、uniq、wc)

一.sort 工具 (1)sort 是一个以行为单位对文件内容进行排序的工具,也可以根据不同的数据类型来排序 (2)sort 命令格式:sort [选项] 参数 (3)常用的选项: -f:忽略大小写: -b:忽略每行前面的空格: -M:按照月份进行排序: -n:按照数字进行排序: -r:反向排序: -u:等同于 uniq,表示相同的数据仅显示一行: -t:指定分隔符,默认使用[Tab]键分隔: -o <输出文件>:将排序后的结果转存至指定文件: -k:指定排序区域: 示例1:将 /etc/pa

Linux中sort和uniq关于排序去重的那些用法

相信在Linux下对文件操作经常会用到sort和uniq命令,下面系统的介绍一下这两个命令的用法. sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出.sort命令既可以从特定的文件,也可以从stdin中获取输入. 语法 sort(选项)(参数) 选项 -b:忽略每行前面开始出的空格字符: -c:检查文件是否已经按照顺序排序: -d:排序时,处理英文字母.数字及空格字符外,忽略其他的字符: -f:排序时,将小写字母视为大写字母: -i:排序时,除了040至176之间的A

【书评:Oracle查询优化改写】第五至十三章

[书评:Oracle查询优化改写]第五至十三章 一.1  BLOG文档结构图 一.2  前言部分 一.2.1  导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O(∩_∩)O~: ① 字符串的处理 ② 常用分析函数 ③ 用sql输出九九乘法表 本文如有错误或不完善的地方请大家多多指正,ITPUB留言或QQ皆可,您的批评指正是我写作的最大动力. 一.2.2  实验环境介绍 oracle 11g 一.2.3  相关参考文章链接 前4章的链接参考相关连接:

javascript高级程序设计 第十三章--事件

javascript高级程序设计 第十三章--事件js与HTML的交互就是通过事件实现的,事件就是文档或浏览器窗口中发生的一些特定的交互瞬间. 事件流:事件流描述的是从页面中接收事件的顺序,IE的是事件冒泡流,Netscape的是事件捕获流,这个两个是完全相反的事件流概念. 事件冒泡:由最具体的元素接收,然后逐级向上传播到更高级的节点,即事件沿DOM树向上传播,直到document对象. 事件捕获:不大具体的节点应该更早接收到事件,相当于沿DOM节点树向下级传播直到事件的实际目标,在浏览器中,是

JavaScript高级程序设计:第十三章

第十三章 一.理解事件流 事件流描述的是从页面中接收事件的顺序. 1.事件冒泡 IE的事件流叫做事件冒泡,即事件开始时由最具体的元素接收,然后逐级向上传播到较为不具体的节点.以下面的HTML页面为例: <!DOCTYPE html> <html> <head> <title>Event Bubling Example</title> </head> <body> <div id="myDiv"&g

第十三章 进程、线程类的实现

                                        第十三章   进程.线程类的实现         多线程是指在一个进程内可以同时运行多个任务,每个任务由一个单独的线程来完成.线程是进程运行的基本单位,一个进程中可以同时运行多个线程.如果程序被设置为多线程方式,可以提高程序运行的效率和处理速度. 多个线程共用一个进程的资源:进程的调度.切换是在10ms的"时钟滴答"定时中断程序里进行.如果一个线程获得CPU,那么在下一个Tick到来前:是不可能被切换出去的

Java编程思想第四版读书笔记——第十三章 字符串

Java编程思想第四版读书笔记--第十三章 字符串 字符串的操作是计算机程序设计中最常见的行为. 关键词: StringBuilder ,StringBuffer,toString(),format转换,正则表达式, 1.不可变String String对象时不可变的.每当把String对象作为方法的参数时,都会复制一份引用.(其实就是对函数中参数列表中参数的操作不会影响外面的原参数) 如下: import static net.mindview.util.Print.*; public cla

【读书笔记】《推荐系统(recommender systems An introduction)》第十章至第十三章

第十章 在线消费决策 这一张主要写消费者的心理,更贴近于心理学,而不是技术方面. 1. 传统的决策模型是认为人们的兴趣始终如一,不会发生变化:不过现代研究表明,用户在决策过程中偏好并不稳定 2. 人们会根据物品的展示环境做决策:同样的商品,放到不同环境下面展示,身价就不同 3. 首位/新近效应:位于列表首位和末尾的物品,更容易被记住 4. 框架效应:展现框架决定用户决策 5. 启动效应 6. ... 个人评价,如果想深入了解这一张说的内容,还不如找一本消费心理学的书来看 ============