linux sort命令 实例

linux sort命令 实例,第1张

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命令用于将文本文件内容加以排序,sort可针对文本文件的内容,以行为单位来排序。

sort命令的语法格式:sort[参数][文件]

Linux sort命令参数:

-b:忽略每行前面开始出的空格符号。

-c:检查文件是否已经按照顺序排序。

-d:排序时,处理英文字母、数字及空格字符外,忽略其他的字符。

-f:排序时,将小写字母视为大写字母。

-i:排序时,除了040至176之间的ASCII字符外,忽略其他的字符。

-m:将几个排序好的文件进行合并。

-M:将前面三个字母依照月份的缩写进行排序。

-n:依照数值的大小排序。

-u:意味着是唯一的,输出的结果是去完重了的。

-o:<输出文件>将排序后的结果存入指定的文件。

-r:以相反的顺序来排序。

-t:<分隔字符>指定排序时所用的栏位分隔字符。

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

降序

在输出中去重

将排序结果输出到原文件

sort的默认输出是输出到标准输出,如果想把结果输出到文件,需要 sort file >newfile,但是如果想把结果输出到原文件这样就不行了,这时就需要 使用sort -o

以数值来排序

sort 默认是按照字符串排序的,这样就会出现10比3小的情况,sort -n 就可以告诉sort 以整数排序

-t 后面跟 分隔符

-k 后面跟数字,表示用第几列排序

如 sort -t : -k 2 表示把每行 以:号分割,按照第二列排序

banana:30:5.5

orange:20:3.4

apple:10:2.5

我们可以看到,当baidu 和soho都是100的时候,baidu排在前面,当当前域按照默认规矩,是从第一个域开始进行升序排序,因此baidu排在了sohu前面。

sort 支持 -k 2 -k3这种模式,如果你需要,你可以继续这么写下去

你仔细看看,在-k 3后面偷偷加上了一个小写字母r,r和-r的作用是一样,你也可以把前面的-n去掉 在r后面加上n,如下

其实-k 选项 功能很强大,语法[ FStart [ .CStart ] ] [ Modifier ] [ , [ FEnd [ .CEnd ] ][ Modifier ] ]

从逗号前后 分为两大部分,即-k 2,2,是严格使用第一个域排序,如果只设置-k 2 其实是按照从第一个域到行尾。逗号分开的每部分又有一个点表示子域,即-k 1.2表示 按照第一个域的第二个字符排序,Modifiers就是我们用到的n和r 如 -k 1.2nr 具体我们看下面的例子。

我们使用了-k 1.2,这就表示对第一个域的第二个字符开始到本域的最后一个字符为止的字符串进行排序。你会发现baidu因为第二个字母是a而名列榜首。sohu和 google第二个字符都是o,但sohu的h在google的o前面,所以两者分别排在第二和第三。这和之前说到的按照默认的排序规则 是不同的,当第一个域的第二个字符相同时,他不会去按照第一个字符排序,而是按照后面的字符排序,这是因为-k 1.2是对第一个域的第二个字符开始到本域的最后一个字符为止的字符串进行排序。而之前的夸域其实是一种假象。

-u只识别用-k设定的域,发现相同,就将后续相同的行都删除

但是这时候,却一行也没有删除。原来-u是会权衡所有-k选项,将都相同的才会删除,只要其中有一级不同都不会轻易删除的

可以用到b、d、f、i、n 或 r。

其中n和r你肯定已经很熟悉了。

b表示忽略本域的签到空白符号。

d表示对本域按照字典顺序排序(即,只考虑空白和字母)。

f表示对本域忽略大小写进行排序。

i表示忽略“不可打印字符”,只针对可打印字符进行排序。(有些ASCII就是不可打印字符,比如\a是报警,\b是退格,\n是换行,\r是回车等等)


欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/yw/8493523.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-17
下一篇2023-04-17

发表评论

登录后才能评论

评论列表(0条)

    保存