第十三章 对文本进行排序、单一和重复操作: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码值进行比较,最后将他们按升序输出。

[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部分的FStartC.StartC.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命令

名字解释

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

语法

uniq (选项) (参数)

选项

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

参数

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

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

实例

删除重复行:

[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 -c2 aaaaaaaaaaaa1 bbbbbbbbbb1 bbbbbbbbbbbbbb1 cccccccc1 cccccccccccccc2 dddddddddddd

在文件中找出重复的行:

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

实践例子:统计当天httpd访问日志,次数最多的前5个ip

日志格式如下:

[root@z1 httpd]# head -2 access_log139.162.88.63 - - [05/Aug/2018:03:26:26 +0800] "GET http://clientapi.ipip.net/echo.php?info=1234567890 HTTP/1.1" 404 206 "-" "Go-http-client/1.1"
78.129.130.54 - - [05/Aug/2018:03:44:39 +0800] "GET /xmlrpc.php HTTP/1.1" 404 208 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6"

实施命令:

cat access_log | grep "06/Aug/2018" | awk '{ print $1 }' | uniq -c | sort -r | head -5

解决思路:
1、需要先用grep 过滤当天的日志信息
2、然后使用awk 只打印ip 参数出来
3、使用uniq -c 统计ip重复出现的次数
4、使用sort -r 进行相反顺序排序
5、使用head -5 只打印前5行内容

查询结果:

[root@z1 httpd]# cat access_log | grep "06/Aug/2018" | awk '{ print $1 }' | uniq -c | sort -r | head -58 93.80.161.2462 68.56.29.1002 60.191.52.2542 41.233.148.1182 201.238.154.10

转载于:https://blog.51cto.com/506554897/2118604

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

  1. Shell 编程之正则表达式与文本处理器--(grep,egrep 与文本处理器-sed、awk、sort、uniq、tr)

    文章目录 一.正则表达式 1.1 正则表达式概述 1.1.1 正则表达式的定义 1.1.2 正则表达式用途 1.2 基础正则表达式 1.3 基础正则表达式:grep命令 1.3.1 查找特定字符 1. ...

  2. linux排序语言,Linux sort 排序命令uniq去重复行

    sort命令 sort 命令对 File 参数指定的文件中的行排序,并将结果写到标准输出.如果 File 参数指定多个文件,那么 sort 命令将这些文件连接起来,并当作一个文件进行排序. sort语 ...

  3. 高级shell编程笔记(第十三章 系统与管理命令)

    第十三章 系统与管理命令 在/etc/rc.d 目录中的启动和关机脚本中包含了好多有用的(和没用的)这些系统管理命令.这些命令通常总是被 root 用户使用,用与系统维护或者是紧急文件系统修复.一定要 ...

  4. 第十三章 使用动态SQL(一)

    文章目录 第十三章 使用动态SQL(一) 动态SQL简介 动态SQL与嵌入式SQL `%SQL.Statement`类 创建一个对象实例 %SelectMode属性 %SchemaPath属性 %Di ...

  5. 第十三章 使用系统监视器 - 系统监视器

    文章目录 第十三章 使用系统监视器 - 系统监视器 系统监视器 系统监控进程 第十三章 使用系统监视器 - 系统监视器 System Monitor 是一种灵活的.用户可扩展的实用程序,用于监控 数据 ...

  6. 李弘毅机器学习笔记:第十三章—CNN

    李弘毅机器学习笔记:第十三章-CNN 为什么用CNN Small region Same Patterns Subsampling CNN架构 Convolution Propetry1 Propet ...

  7. 第二十三章 案例分析

    第二十三章 案例分析 一.可行×××问题 1.主要内容 技术可行性分析.经济可行性分析.运行环境可行性分析. 其他方面可行性分析,如法律.社会道德. 2.可能产生的原因 没有进行系统的可行性分析.调研 ...

  8. C++ Primer记录_第十三章

    文章目录 第十三章 拷贝控制 13.1 拷贝.赋值与销毁 13.1.1 拷贝构造函数 13.1.2 拷贝赋值运算符 13.1.3 析构函数 13.1.4 三/五法则 13.1.5 使用=default ...

  9. ibmMQ-第十三章

    第十三章 用ActiveX编程 目标 学习使用WebSphere MQ automatin classes for ActiveX编程. 13.1 概述 WebSphere MQ Automation ...

最新文章

  1. 无所不在的物联网设备 你我都需要正视所带来的安全问题
  2. 【vue插件篇】vue-form-check 表单验证
  3. 哈,你猜一个 TCP 连接上面能发多少个 HTTP 请求?
  4. botley编程机器人测评_浅谈少儿编程教育启蒙----教具篇
  5. 【收藏】C# WinForm开发系列 - DataGridView 使用方法集锦 - 宁波.Net技术讨论区
  6. 软件工程(可行性研究讲解)
  7. 值得借鉴的新年海报设计|PSD分层模板,图层素材随心用
  8. 不做别人思想的“跑马场”(人民论坛)
  9. paip.编程语言到底有没有优劣之分优秀之分
  10. 平面设计从事什么工作
  11. 科技爱好者周刊:第 98 期
  12. 软考高级信息系统项目管理师/高项和PMP的区别,以及对比
  13. html动画转换为gif,css 将长图做成gif动画
  14. 网络应用程序的架构:C/S架构、B/S架构的区别与优缺点
  15. linux 空格变问号,遭遇UTF-8编码转换后,空格变成问号的问题
  16. CTF训练营学习笔记1(web)
  17. MT6735和MT6737芯片资料下载,哪个好?
  18. 叙述两个计算机技术的应用,《计算机技术与应用基础》复习题附答案.doc
  19. 2017web前端校招面试总结 - 陌陌技术保障组
  20. IG02数据准备(翻译)

热门文章

  1. liteide无法自动补全代码问题解决【go: cannot find GOROOT directory: c:\go】
  2. Software Construction Series(1)
  3. JAVA-JSP内置对象之application对象获得其他信息
  4. BZOJ 4810 [Ynoi2017]由乃的玉米田(莫队+bitset)
  5. List.Sort用法
  6. poj2778DNA Sequence (AC自动机+矩阵快速幂)
  7. WCF服务端基于配置的实现——拦截
  8. 学Python半年,56岁的潘叔叔晒出99分成绩单,你呢?
  9. AI时代的稀缺人才:解读数据科学家成长的4个阶段
  10. 「最有用」的特殊大数据:一文看懂文本信息系统的概念框架及功能