Sort是用来对文件进行排序的,发现这个命令比想象中更复杂,更强大。仔细研究文件并记录下来。
先看文档,建议浏览,使用时详细看:
$ sort --help 用法:sort [选项]... [文件]... 或:sort [选项]... --files0-from=F Write sorted concatenation of all FILE(s) to standard output.如果没有指定文件,或者文件是“-”,则从标准输入中读取。
所需参数适用于长选项和短选项。排序选项:
- b,-b,- ignore-leading-blanks忽略前导空白色区域-d -d,- dictionary-order仅考虑空白色区域和字母字符-f -f,- ignore-case忽略字母大小写-g,-general-numeric-根据常规数值进行排序比较-i,-ignore-non-仅考虑可打印字符-M,- month-sort compare(未知)& lt' JAN ' & lt...& ltDec'-h,-human-numeric-sort使用清晰的数字(例如:2k1g)-n,-numeric-sort compare根据字符串数值-r,-random-sort shuffle,但对相同的键进行分组。参见shuf(1) - random-source=FILE从FILE-r中获取随机字节,-Reverse比较结果-sort = WORD按照WORD指定的格式排序:general number -g,high ready-h,month -M,number -n,random-r,version-v-v -V-V,- version-sort对文本中的自然版本进行排序
其他选项:
-batch-size = NMERGE一次合并多达个NMERGE输入;使用临时文件-c,-check,-check = diagnostic-first检查输入是否排序(如果排序的话);如果是有序的-c,则不要操作,-check = quiet,-check = silent类似于-c,但不报告第一个无序行- compress-program= =程序使用指定的程序压缩临时文件;使用程序的-d参数对文件进行解压缩- debug为用于排序的行添加注释,并将可能有问题的用法输出到标准错误输出- files0-from= =文件从指定的文件中读取以NUL终止的名称,如果文件被指定为“-”,则从标准输入中读取文件名-k,-key = key def通过键排序;KEYDEF给出位置和类型-m,- merge合并已经排序的文件;请勿排序-o,- output= = file将结果写入文件而不是标准输出-s,-stable禁用最后的比较以稳定比较算法-s -S,- buffer-size= = size指定主内存缓存大小-t,- field-separator= = separator使用指定的分隔符而不是从non-空到空-t -T的转换,-temporary-directory = = directory使用指定的目录而不是$TMPDIR或/tmp作为临时目录, 并且可以用多个选项指定多个目录-parallel = n将同时运行的排序数更改为n。如果没有-c,排序结果将只输出一次-z,-以零结尾的行分隔符是nul,而不是换行符-help显示此帮助信息并退出- version显示版本信息并退出
KEYDEF是F[。C][OPTS][,F[。C][OPTS]]用于start和topposition,其中f是FieldNumber,c是字段中的字符位置;两者都是原点1,stoppositiondefaultstothe到线的终点。如果-t或-b都无效,字段中的字符将从前面的空格开始计算。OPTS是一个或多个单字母排序选项[bdfgiMhnRrV],它覆盖该键的全局排序选项。如果没有给定密钥,则使用整行作为密钥。使用- debug诊断不正确的密钥用法。
SIZE后面可能跟有以下乘法后缀:% 1%内存,b 1,K 1024(默认),M,G,T,P,E,Z,y依此类推。
***警告* * *环境指定的区域设置会影响排序顺序。设置LC_ALL=C以获得使用无效字节值的传统排序顺序。
Gnu coreutils在线帮助:http://www.gnu.org/software/coreutils/,请将sort的翻译错误报告给http://translationproject.org/team/zh_CN.html.完整文档:http://www.gnu.org/software/coreutils/sort或通过:info(coreutils)sort invoke本地提供
它的基本用法是“sort -k2,2 file”,意思是排序的关键字从第2列开始,到第2列结束,意思是按照第二列排序。
下面是一个逐渐理解更复杂用法的例子。假设我们希望对文件进行如下排序:
$cat stabc100 90ddd100 80fff80 100eee120 80xxx100 100假设我们想按第二列排序:
$sort -k 2,2 stabc100 90ddd100 80xxx100 100eee120 80fff80 100好像不对?因为默认是按字符串排序,80排在100之后,所以我们需要加上-n或者-g-n是一个普通的数字来解析,比如“1.23”,但是不能解析科学记数法中的数字,比如“2e-30”,而-g可以解析。
$sort -n -k 2,2 stfff80 100abc100 90ddd100 80xxx100 100eee120 80接下来,我们可能希望首先按第二列排序,如果第二列相同,则按第三列排序。我们可能是这样的:
$sort -n -k 2,3 stfff80 100abc100 90ddd100 80xxx100 100eee120 80不幸的是,-k2,3意味着将第二列和第三列放在一起进行排序,但这两个数字不能放在一起。如果我们把它放在一根绳子上,我们可以把它放在一起:
$sort -k 2,3 stxxx100 100ddd100 80abc100 90eee120 80fff80 100上面的命令会把第二列和第三列的字符串拼出来,所以“100 100”会变成“100100”,但这不是我们想要的。
为了实现我们的目标,我们可以使用多重k。
$sort -n -k 2,2 -k 3,3 stfff80 100ddd100 80abc100 90xxx100 100eee120 80我们可以看到第二列为100的三行确实是按照第三列排序的。接下来,我们想按降序排序,所以我们可以使用-r:
$sort -r -n -k 2,2 -k 3,3 steee120 80xxx100 100abc100 90ddd100 80fff80 100一切如我们所愿,但如果我们希望第二列下降,而第三列上升呢?如果这是-r,它必须放在-k中,这意味着它仅对该密钥有效:
$sort -n -k 2,2r -k 3,3 stfff80 100eee120 80ddd100 80abc100 90xxx100 100我们甚至可以将第二列中的键视为数值,而将第三列视为字符串:
$sort -k 2,2nr -k 3,3 steee120 80xxx100 100ddd100 80abc100 90fff80 100上述命令将第二列作为数值,然后按相反的顺序排列;而第三行按正序排列成字符串。
1.《sort Linux sort命令简介》援引自互联网,旨在传递更多网络信息知识,仅代表作者本人观点,与本网站无关,侵删请联系页脚下方联系方式。
2.《sort Linux sort命令简介》仅供读者参考,本网站未对该内容进行证实,对其原创性、真实性、完整性、及时性不作任何保证。
3.文章转载时请保留本站内容来源地址,https://www.lu-xu.com/tiyu/754561.html