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

简介:

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,如需转载请自行联系原作者
相关文章
|
1月前
|
Linux Shell 网络安全
【Shell 命令集合 网络通讯 】Linux 与SMB服务器进行交互 smbclient命令 使用指南
【Shell 命令集合 网络通讯 】Linux 与SMB服务器进行交互 smbclient命令 使用指南
49 1
|
7月前
|
Shell Linux 应用服务中间件
ABAP 面试题:如何使用 ABAP 编程语言的 System CALL 接口,直接执行 ABAP 服务器所在操作系统的 shell 命令?
ABAP 面试题:如何使用 ABAP 编程语言的 System CALL 接口,直接执行 ABAP 服务器所在操作系统的 shell 命令?
113 0
|
3月前
|
中间件 Linux
linux查看服务器系统版本命令
linux查看服务器系统版本命令
61 0
|
1月前
|
网络协议 安全 Shell
【Shell 命令集合 系统设置 】Linux 从远程时间服务器获取当前日期和时间 rdate命令 使用指南
【Shell 命令集合 系统设置 】Linux 从远程时间服务器获取当前日期和时间 rdate命令 使用指南
36 0
|
1月前
|
Shell Linux 网络安全
【Shell 命令集合 网络通讯 】Linux 管理Apache HTTP服务器 httpd命令 使用指南
【Shell 命令集合 网络通讯 】Linux 管理Apache HTTP服务器 httpd命令 使用指南
30 0
|
1月前
|
Shell Linux Apache
【Shell 命令集合 网络通讯 】Linux 管理Apache HTTP服务器 apachectl命令 使用教程
【Shell 命令集合 网络通讯 】Linux 管理Apache HTTP服务器 apachectl命令 使用教程
162 1
|
5月前
|
Cloud Native 网络安全 Go
SSH连接服务器后执行多条命令
SSH连接服务器后执行多条命令
|
5月前
|
网络安全 数据安全/隐私保护
用smtp发送邮件,语法错误,无法识别命令。 服务器响应为:Authentication is re
用smtp发送邮件,语法错误,无法识别命令。 服务器响应为:Authentication is re
94 0
|
1月前
|
Linux Shell 调度
PBS任务脚本模板及常用服务器PBS命令介绍
【2月更文挑战第21天】本文介绍在Linux服务器中,通过PBS(Portable Batch System)作业管理系统脚本的方式,提交任务到服务器队列,并执行任务的方法~
130 4
PBS任务脚本模板及常用服务器PBS命令介绍
|
1月前
|
Linux
一个能够在 ABAP 服务器执行 linux 命令的小工具
一个能够在 ABAP 服务器执行 linux 命令的小工具
15 0