当前位置:首页 » 操作系统 » linuxsort命令

linuxsort命令

发布时间: 2024-10-12 22:32:58

linux sort命令 实例

sort排序是根据从输入行抽取的一个或多个关键字进行比较来完成的。排序关键字定义了用来排序的最小的字符序列。缺省情况下以整行为关键字按ASCII字符顺序进行排序。
改变缺省设置的选项主要有:
-
m
若给定文件已排好序,合并文件。
-
c
检查给定文件是否已排好序,如果它们没有都排好序,则打印一个出错信息,并以状态值1退出。
-
u
对排序后认为相同的行只留其中一行。
-
o
输出文件
将排序输出写到输出文件中而不是标准输出,如果输出文件是输入文件之一,sort先将该文件的内容写入一个临时文件,然后再排序和写输出结果。
改变缺省排序规则的选项主要有:
-
d
按字典顺序排序,比较时仅字母、数字、空格和制表符有意义。
-
f
将小写字母与大写字母同等对待。
-
I
忽略非打印字符。
-
M
作为月份比较:“JAN”<“FEB”<¼
<“DEC”。
-
r
按逆序输出排序结果。
+posl
-
pos2
指定一个或几个字段作为排序关键字,字段位置从posl开始,到pos2为止(包括posl,不包括pos2)。如不指定pos2,则关键字为从posl到行尾。字段和字符的位置从0开始。
-
b
在每行中寻找排序关键字时忽略前导的空白(空格和制表符)。
-
t
separator
指定字符separator作为字段分隔符。
用sort命令对text文件中各行排序后输出其结果。请注意,在原文件的第二、三行上的第一个单词完全相同,该命令将从它们的第二个单词vegetables与fruit的首字符处继续进行比较。
$
cat
text
vegetable
soup
fresh
vegetables
fresh
fruit
lowfat
milk
以sort排序后输出的结果:
$
sort
text
fresh
fruit
fresh
vegetables
lowfat
milk
vegetable
soup

② linux sort 命令整理

无论是工作中使用还是应付各种面试,linux sort 都是必须要掌握的 linux 基本命令之一。尤其是 linux sort -k 命令,经常会被搞晕,索性好好研究一下 sort 命令

语法:

选项:

参数就不一一介绍了,直接上例子,首先先看下原始的排序数据
cat sort.log

1、打印从哪列开始是乱序
sort -c sort.log; echo $?

sort -C sort.log; echo $?

其中,返回结果 1,表示文件不是已经排序好的文件
2、默认排序( 整行进行ASCII字符升序)
sort sort.log

3、高能来了,让人迷糊的 k 语法,首先看下 k 的语法格式

这个语法格式可以被其中的逗号(”,”)分为两大部分,Start部分和End部分
Start和End部分都由三部分组成,其中的Modifier部分就是类似n和r的选项部分,可省略
FStart、Fend,表示使用的域,而CStart则表示在FStart域中从第几个字符开始算"排序首字符",同理,CEnd表示结尾的第几个字符是排序末尾字符,.CStart、.CEnd是可以省略的,分别表示从本域的开头部分开始、到本域的域尾结束,CEnd设定为0,也是表示结尾到域尾。口说无凭,上几个例子吧

3.1 对第三列进行排序,如果不加n,按照 ASCII字符排序
sort -t $' ' -k 3 sort.log

3.2 加n后,按照数值排序
sort -t $' ' -k 3n sort.log

3.3 不指定 FEnd 时,多个 -k 从前往后排序可以,从后往前不行
从后往前,多个 -k,数据符合预期
sort -t $' ' -k 3n -k 1 sort.log

从后往前,多个 -k ,第三列相同时,按照第一列降序排列,数据符合预期
sort -t $' ' -k 3n -k 1r sort.log

更换成从前往后
sort -t $' ' -k 1 -k 3n sort.log

sort -t $' ' -k 1 -k 3nr sort.log

通过 sort -t $' ' -k 1 -k 3n sort.log 和 sort -t $' ' -k 1 -k 3nr sort.log 返回的结果发现,在第一列相等时,无论其三列是正序排列,还是逆序排列,结果都一样,说明后边的 -k 未生效
当指定 FEend 后
sort -t $' ' -k 1,1 -k 3nr sort.log

3.4 作用域
紧跟在字段后的选项(如"-k3n"的"n"和"-k2nr"的"n","r")称为私有选项,使用短横线写在字段外的选项(如"-n"、"-r")为全局选项。当没有为字段分配私有选项时,该排序字段将继承全局选项,所有选项包括但不限于"bfnrhM"
除了"b"选项外,其余选项无论是指定在FStart还是FEnd中都是等价的,对于"b"选项,指定在FStart则作用于FStart,指定在FEnd则作用于FEnd
sort -t $' ' -k1r,2 sort.log ,可以看出一、二列都是倒叙排列

3.5 注意
指定n选项按数值排序时, 由于"n"选项只能识别数字和负号"-",当排序时遇到无法识别字符时,将导致该key的排序立即结束,n选项绝对不会跨域进行比较
默认情况下,sort会进行一次 "最后的排序" ,按照默认规则对整行进行一次排序,这次排序称为"最后的排序"

sort -t $' ' -k3n sort.log ,在第三列相等时,整行会按照 ASCII 进行最后的升序排列

sort -t $' ' -k3,4n -s sort.log ,加了 -s 后,不会进行最后的排序(1000相同时,e在b的前边了),而是保留原排序

3.6 按照某个域中的第n个字符进行排序
sort -t $' ' -k2.3,2.3 sort.log ,按第二列第三个字符进行排序

4、 -h 使用易读性数字(例如:2K、1G)
sort -t $' ' -k5h sort.log

sort -t $' ' -k2,2 sort.log|uniq

sort -t $' ' -k2,2 -u sort.log 会对第二列进行去重,而 sort -t $' ' -k2,2 sort.log|uniq 会对整行进行去重(当然uniq也可以按照第二列进行去重)

sort整理完了,欢迎大牛指教

③ Linux文本处理命令的Sort命令

sort命令的功能是对文件中的各行进行排序。sort命令有许多非常实用的选项,这些选项最初是用来对数据库格式的文件内容进行各种排序操作的。实际上,sort命令可以被认为是一个非常强大的数据管理工具,用来管理内容类似数据库记录的文件。
Sort命令将逐行对文件中的内容进行排序,如果两行的首字符相同,该命令将继续比较这两行的下一字符,如果还相同,将继续进行比较。
语法:
sort [选项] 文件
说明:sort命令对指定文件中所有的行进行排序,并将结果显示在标准输出上。如不指定输入文件或使用“- ”,则表示排序内容来自标准输入。
sort排序是根据从输入行抽取的一个或多个关键字进行比较来完成的。排序关键字定义了用来排序的最小的字符序列。缺省情况下以整行为关键字按ASCII字符顺序进行排序。
改变缺省设置的选项主要有:
- m 若给定文件已排好序,合并文件。
- c 检查给定文件是否已排好序,如果它们没有都排好序,则打印一个出错信息,并以状态值1退出。
- u 对排序后认为相同的行只留其中一行。
- o 输出文件 将排序输出写到输出文件中而不是标准输出,如果输出文件是输入文件之一,sort先将该文件的内容写入一个临时文件,然后再排序和写输出结果。
改变缺省排序规则的选项主要有:
- d 按字典顺序排序,比较时仅字母、数字、空格和制表符有意义。
- f 将小写字母与大写字母同等对待。
- I 忽略非打印字符。
- M 作为月份比较:“JAN”<“FEB” p>
- r 按逆序输出排序结果。
+posl - pos2 指定一个或几个字段作为排序关键字,字段位置从posl开始,到pos2为止(包括posl,不包括pos2)。如不指定pos2,则关键字为从posl到行尾。字段和字符的位置从0开始。
- b 在每行中寻找排序关键字时忽略前导的空白(空格和制表符)。
- t separator 指定字符separator作为字段分隔符。
下面通过几个例子来讲述sort的使用。
用sort命令对text文件中各行排序后输出其结果。请注意,在原文件的第二、三行上的第一个单词完全相同,该命令将从它们的第二个单词vegetables与fruit的首字符处继续进行比较。
$ cat text
vegetable soup
fresh vegetables
fresh fruit
lowfat milk
$ sort text
fresh fruit
fresh vegetables
lowfat milk
vegetable soup
用户可以保存排序后的文件内容,或把排序后的文件内容输出至打印机。下例中用户把排序后的文件内容保存到名为result的文件中。
$ sort text>result
以第2个字段作为排序关键字对文件example的内容进行排序。
$ sort +1-2 example
对于file1和file2文件内容反向排序,结果放在outfile中,利用第2个字段的第一个字符作为排序关键字。
$ sort -r -o outfile +1.0 -1.1 example
sort排序常用于在管道中与其他命令连用,组合完成比较复杂的功能,如利用管道将当前工作目录中的文件送给sort进行排序,排序关键字是第6个至第8个字段。
$ ls - l | sort +5 - 7
sort命令也可以对标准输入进行操作。例如,如果您想把几个文件文本行合并,并对合并后的文本行进行排序,您可以首先用命令cat把多个文件合并,然后用管道操作把合并后的文本行输入给命令sort,sort命令将输出这些合并及排序后的文本行。在下面的例子中,文件veglist与文件fruitlist的文本行经过合并与排序后被保存到文件clist中。
$ cat veglist fruitlist | sort > clist

热点内容
我的世界如何加入服务器小游戏 发布:2024-10-13 00:14:27 浏览:153
解压菜蛋糕 发布:2024-10-12 23:46:49 浏览:9
手机qq锁上密码如何解锁 发布:2024-10-12 23:36:24 浏览:463
压缩机固定架 发布:2024-10-12 23:34:12 浏览:664
linux内核有多少行代码 发布:2024-10-12 23:30:03 浏览:231
qq源码资源网 发布:2024-10-12 23:23:52 浏览:21
为什么web服务器没有对应的站点 发布:2024-10-12 22:55:46 浏览:780
安卓手机在哪里下游戏 发布:2024-10-12 22:54:08 浏览:406
财年算法问题 发布:2024-10-12 22:51:50 浏览:314
sql最近的 发布:2024-10-12 22:51:38 浏览:335