sort

格式:sort [-options] filename[s]

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
[root@justin ~]# cat /home/passwd
2
3
4
1
3
banana
Pear
orange
pear
[root@justin ~]# sort /home/passwd
1
2
3
3
4
banana
orange
pear
Pear
[root@justin ~]#

options

-f  :忽略大小写的差异,例如 A 与 a 视为编码相同;(将小写字母都转换为大写字母来进行比较)

-b  :忽略最前面的空格符部分;

1
2
3
4
5
6
7
8
9
10
11
[root@justin ~]# cat /home/passwd|sort
 apple:10:2.5
  nana:30:5.5
orange:20:3.4
pear:90:2.3
[root@justin ~]# cat /home/passwd|sort -b
 apple:10:2.5
  nana:30:5.5
orange:20:3.4
pear:90:2.3
[root@justin ~]#

好像没啥区别?

-M  :将前面3个字母依照月份的缩写进行排序,例如 JAN, DEC 等等的排序方法;

-n  :使用『纯数字』进行排序(默认是以字符型态来排序的);

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@justin ~]# cat /home/passwd
1
4
3
5
30
2
[root@justin ~]# cat /home/passwd |sort
1
2
3
30
4
5
[root@justin ~]# cat /home/passwd |sort -n
1
2
3
4
5
30
[root@justin ~]#

默认以字符进行行间比较,30会先去比较3再去比较0,3比4小,所以30排在了4前面

-r  :反向排序;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@justin ~]# cat /home/passwd
1
4
3
5
2
[root@justin ~]# cat /home/passwd |sort
1
2
3
4
5
[root@justin ~]# cat /home/passwd |sort -r
5
4
3
2
1
[root@justin ~]#

-o:重定向输出文件,默认是把结果输出到标准输出

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
[root@justin ~]# cat /home/passwd
1
4
2
20
3
5
[root@justin ~]# sort -n /home/passwd > /home/passwd1
[root@justin ~]# cat /home/passwd
1
4
2
20
3
5
[root@justin ~]# cat /home/passwd1
1
2
3
4
5
20
[root@justin ~]# sort -n /home/passwd > /home/passwd
[root@justin ~]# cat /home/passwd
[root@justin ~]# cp /home/passwd1 /home/passwd
cp:是否覆盖"/home/passwd"? y
[root@justin ~]# sort -n /home/passwd -o /home/passwd
[root@justin ~]# cat /home/passwd
1
2
3
4
5
20
[root@justin ~]#

sort默认是把结果输出到标准输出,所以需要用重定向才能将结果写入文件,如果将排序的结果通过重定向符(>)重定向到新文件中会正常显示,如果重定向到本文件中本文件内容就会被清空,只是不能用重定向符而需要使用参数-o

-u  :就是 uniq ,相同的数据中,仅出现一行;

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@justin ~]# cat /home/passwd
1
2
3
4
3
2
3
[root@justin ~]# cat /home/passwd|sort
1
2
2
3
3
3
4
[root@justin ~]# cat /home/passwd|sort -u
1
2
3
4
[root@justin ~]#

-t  :分隔符,默认是用 [tab] 键来分隔;

-k  :以那个区间 (field) 来进行排序的意思

文件/home/passwd里有三列,列与列之间用冒号隔开了,第一列表示水果类型,第二列表示水果数量,第三列表示水果价格,现以水果数量来排序,也就是以第二列来排序,这时就需要用到-t选项来指定分隔符(和前面awk的-f,cut的-d类似),然后通过-k来指定列数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[root@justin ~]# cat /home/passwd
nana:30:5.5
apple:10:2.5
pear:90:2.3
orange:20:3.4
[root@justin ~]# sort -n -t ':' -k 2 /home/passwd
apple:10:2.5
orange:20:3.4
nana:30:5.5
pear:90:2.3
[root@justin ~]# sort -nr -t: -k 2 /home/passwd
pear:90:2.3
nana:30:5.5
orange:20:3.4
apple:10:2.5
[root@justin ~]#

以冒号为分隔符安装第二列的数字为单位进行降序排序,如果第二列相同再安装第三列以数字为单位进行升序排序

1
2
3
4
5
6
7
8
9
10
11
[root@justin ~]# cat /home/passwd
nana:30:5.5
apple:10:2.5
pear:10:2.3
orange:20:3.4
[root@justin ~]# sort -t ':' -k 2nr -k 3n /home/passwd
nana:30:5.5
orange:20:3.4
pear:10:2.3
apple:10:2.5
[root@justin ~]#


uniq

格式:uniq [-ptions]

功能:去除排序过的文件中的重复行,因此uniq经常和sort合用。也就是说,为了使uniq起作用,所有的重复行必须是相邻的

option:

-i   :不区分大小写 ;

1
2
3
4
5
6
7
8
9
10
[root@justin ~]# sort /home/passwd|uniq
apr
Apr
Jan
Jul
[root@justin ~]# sort /home/passwd|uniq -i
apr
Jan
Jul
[root@justin ~]#

-c  --count:在每行前加上表示相应行目出现次数的前缀编号

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
[root@justin ~]# cat /home/passwd
1
2
3
4
3
2
3
[root@justin ~]# cat /home/passwd|sort
1
2
2
3
3
3
4
[root@justin ~]# cat /home/passwd|sort|uniq -c
      1 1
      2 2
      3 3
      1 4
[root@justin ~]#

-u  :只显示唯一的行

1
2
3
4
5
6
7
8
[root@justin ~]# sort /home/passwd|uniq -ic
      2 apr
      1 Jan
      1 Jul
[root@justin ~]# sort /home/passwd|uniq -iu
Jan
Jul
[root@justin ~]#

-d --repeated:只输出重复的行

1
2
3
4
5
6
7
[root@justin ~]# sort /home/passwd|uniq -ic
      2 apr
      1 Jan
      1 Jul
[root@justin ~]# sort /home/passwd|uniq -id
apr
[root@justin ~]#

-D --all-repeated: 只输出重复的行,不过有几行输出几行

1
2
3
4
5
6
7
8
[root@justin ~]# sort /home/passwd|uniq -ic
      2 apr
      1 Jan
      1 Jul
[root@justin ~]# sort /home/passwd|uniq -iD
apr
Apr
[root@justin ~]#

-f --skip-fields=N:-f 忽略的段数,-f 1 忽略第一段 
-s --skip-chars=N:根-f有点像,不过-s是忽略,后面多少个字符 -s 5就忽略后面5个字符

本文转自 justin_peng 51CTO博客,原文链接:http://blog.51cto.com/ityunwei2017/1335455,如需转载请自行联系原作者

RHEL6基础三十四之服务器维护基础命令④sort、uniq相关推荐

  1. Android Studio第三十四期 - git企业级应用命令

    1.git status 2.git add -A 3.git commit -m "merger" 4.git pull 5.git push origin master 6.g ...

  2. Linux(debian7)操作基础(十四)之文本搜索命令grep使用方法

    一.简介 grep(global search regular RE ) and print out the line,全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它只能使用基本的正则 ...

  3. 回溯法采用的搜索策略_强化学习基础篇(三十四)基于模拟的搜索算法

    强化学习基础篇(三十四)基于模拟的搜索算法 上一篇Dyna算法是基于真实经验数据和模拟经验数据来解决马尔科夫决策过程的问题.本篇将结合前向搜索和采样法,构建更加高效的搜索规划算法,即基于模拟的搜索算法 ...

  4. 【零基础学Java】—Calendar类(三十四)

    [零基础学Java]-Calendar类(三十四) java.util.Calendar日历类 Calendar类是一个抽象类,里面提供了很多操作日历字段的方法 Calendar类无法直接创建对象,里 ...

  5. JAVASE基础模块三十四( 菜鸡版简单登录验证模块系统IO流文件写入)

    JAVASE基础模块三十四( 菜鸡版简单登录验证模块系统IO流文件写入) 开发流程:需求文档 接口文档 效果图 开发环境统一:JDK1.8 IDEA win10 GIT SSM SSH SpringB ...

  6. Python编程基础:第三十四节 文件移动Move a File

    第三十四节 文件移动Move a File 前言 实践 前言 当我们需要将一个文件/文件夹移动到另一个指定路径时,就需要用到shutil.move()函数,该函数需要指定两个参数shutil.move ...

  7. go设置后端启动_Go语言基础(十四)

    Go语言基础(十四) 一.Redis 二.NSQ 三.Go module 四.Context......0 一.Redis Redis是一个key-value存储系统.和Memcached类似,它支持 ...

  8. 【Visual C++】游戏开发笔记三十四 浅墨DirectX提高班之三 起承转合的艺术:Direct3D渲染五步曲

    本系列文章由zhmxy555(毛星云)编写,转载请注明出处. 文章链接: http://blog.csdn.net/zhmxy555/article/details/8223965 作者:毛星云(浅墨 ...

  9. 三十四、深入Java中的泛型(上篇)

    @Author:Runsen @Date:2019年10月22日 19:39:21 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件 ...

最新文章

  1. cocos2d-x 弹出对话框
  2. Science封面:三元锂电池安全性差、寿命短问题已解决,来自美国能源部华人团队最新研究...
  3. vscode中添加C++编译
  4. license 验证服务器唯一机器码_代码审计工具Fortify 17.10及Mac平台license版本
  5. 权威公布:彻底搞清楚哪些笔记本和台式机主板能够支持42mm SATA M.2 NGFF(2242)接口的固态硬盘!!!...
  6. dba的前景_2019年DBA薪资大起底,你拖后腿了吗?
  7. 数据库-优化-案例-count()函数的优化
  8. 转换mp3名称的小程序
  9. html摇晃的桃子代码,index.html
  10. 【BZOJ1060】[ZJOI2007] 时态同步(树形DP)
  11. PyTorch:模型训练和预测
  12. 第二十一讲 ASP.NET页面框架
  13. Java分布式ID生成解决方案
  14. word中无法输入中文
  15. 微型计算机键盘上的tab键汉语译为,微型计算机键盘上的Tab键汉语译为()。
  16. i7z – 用来查看CPU状况
  17. WebRTC实时通信系列教程8 打通P2P连接和信令通信
  18. 【pandas数据分析】pandas数据结构
  19. 通信原理-第9章-数字信号的最佳接收
  20. 奇文共赏 史记-货殖列传-王石传

热门文章

  1. 解决Linux最大进程数和最大文件句柄问题
  2. ASP .NET Core Web Razor Pages系列教程四:使用数据库进行交互 entity-framework(MySQL/MariaDB 版)
  3. perl 连接mysql_perl如何连接mysql数据库?
  4. c语言socket实现ftp,C++ socket实现miniFTP
  5. 计算机通过路由器连接打印机共享的打印机,如何利用无线路由器进行打印机共享访问操作...
  6. RocketMQ 实战 集群监控平台搭建
  7. python计算小数点后有几位_数学提高小数除法竖式计算过程
  8. 哔哩哔哩软测三面,面试题复盘
  9. android游戏boss坐标,热血江湖手游boss刷新点坐标 boss刷新时间 _图文攻略_高分攻略_百度攻略...
  10. 2019成考计算机几时出成绩,2019年成人高考成绩什么时候出来?如何查询