sort - 对文本文件中所有行进行排序

对文本文件中所有行进行排序。

概要

sort [OPTION]... [FILE]...
sort [OPTION]... --files0-from=F

主要用途

  • 将所有输入文件的内容排序后并输出。

  • 当没有文件或文件为-时,读取标准输入。

选项

排序选项:

-b, --ignore-leading-blanks    忽略开头的空白。
-d, --dictionary-order         仅考虑空白、字母、数字。
-f, --ignore-case              将小写字母作为大写字母考虑。
-g, --general-numeric-sort     根据数字排序。
-i, --ignore-nonprinting       排除不可打印字符。
-M, --month-sort               按照非月份、一月、十二月的顺序排序。
-h, --human-numeric-sort       根据存储容量排序(注意使用大写字母,例如:2K 1G)。
-n, --numeric-sort             根据数字排序。
-R, --random-sort              随机排序,但分组相同的行。
--random-source=FILE           从FILE中获取随机长度的字节。
-r, --reverse                  将结果倒序排列。
--sort=WORD                    根据WORD排序,其中: general-numeric 等价于 -g,human-numeric 等价于 -h,month 等价于 -M,numeric 等价于 -n,random 等价于 -R,version 等价于 -V。
-V, --version-sort             文本中(版本)数字的自然排序。

其他选项:

参数

FILE(可选):要处理的文件,可以为任意数量。

返回值

返回0表示成功,返回非0值表示失败。

例子

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

忽略相同行使用-u选项或者uniq

sort-n、-r、-k、-t选项的使用:

关于-k选项的解读和例子:

-k选项深度解读:

这个语法格式可以被其中的逗号,分为两大部分,Start 部分和 End 部分。 Start部分由三部分组成,其中的Modifier部分就是我们之前说过的选项部分; 我们重点说说Start部分的FStartC.StartC.Start是可以省略的,省略的话就表示从本域的开头部分开始。FStart.CStart,其中FStart就是表示使用的域,而CStart则表示在FStart域中从第几个字符开始算排序首字符。 同理,在End部分中,你可以设定FEnd.CEnd,如果你省略.CEnd或将它设定为0,则表示结尾到本域的最后一个字符。

例子:从公司英文名称的第二个字母开始排序:

解读:使用了-k 1.2,表示对第一个域的第二个字符开始到本域的最后一个字符为止的字符串进行排序。你会发现baidu因为第二个字母是a而名列榜首。sohu和google第二个字符都是o,但sohu的h在google的o前面,所以两者分别排在第二和第三。guge只能屈居第四了。

例子:只针对公司英文名称的第二个字母进行排序,如果相同的按照员工工资进行降序排序:

解读:由于只对第二个字母进行排序,所以我们使用了-k 1.2,1.2的表示方式,表示我们只对第二个字母进行排序(如果你问我使用-k 1.2怎么不行?当然不行,因为你省略了End部分,这就意味着你将对从第二个字母起到本域最后一个字符为止的字符串进行排序)。 对员工工资进行排序,我们也使用了-k 3,3,这是最准确的表述,表示我们只对本域进行排序,因为如果你省略了后面的3,就变成了我们对第3个域开始到最后一个域位置的内容进行排序了。

注意

  1. 关于这个复杂命令的学习,建议您阅读info文档及参考博客、问答网站等。

  2. 该命令是GNU coreutils包中的命令,相关的帮助信息请查看man -s 1 shufinfo coreutils 'shuf invocation'

Last updated

Was this helpful?