推广免费网站,辽宁app开发公司,2003建网站,聊城网站推广的公司简介
sort 命令源于英文单词 “sort”#xff0c;表示排序。其主要功能是对文本文件中的行进行排序。它可以根据字母、数字、特定字段等不同的标准进行排序。sort 通过逐行读取文件#xff08;没有指定文件或指定文件为 - 时读取标准输入#xff09;内容#xff0c;并按照…简介
sort 命令源于英文单词 “sort”表示排序。其主要功能是对文本文件中的行进行排序。它可以根据字母、数字、特定字段等不同的标准进行排序。sort 通过逐行读取文件没有指定文件或指定文件为 - 时读取标准输入内容并按照指定的排序规则对行进行排序最后输出排序后的结果。
使用方式
sort [OPTION]... [FILE]...
sort [OPTION]... --files0-fromF排序相关选项 -b, --ignore-leading-blanks忽略行首的空白字符。 -d, --dictionary-order使用字典顺序排序只考虑空白字符和字母及数字字符。 -f, --ignore-case排序时忽略字母的大小写将小写字母作为大写字母看待。 -g, --general-numeric-sort按照通用数值进行排序。 -i, --ignore-nonprinting排序时忽略不可打印的字符。 -M, --month-sort按照月份缩写进行排序 (unknown) ‘JAN’ … ‘DEC’。 -h, --human-numeric-sort按照便于阅读的数值排序例如 2K 1G。 -n, --numeric-sort按照简单的数值进行排序。 -R, --random-sort随机排序类似于洗牌。但具有相同内容的行会被保持在一起。 --random-sourceFILE指定 FILE 文件为随机数生成源供随机排序使用。 -r, --reverse反转排序结果即倒序排列。 --sortWORD根据 WORD 的内容进行排序其中 WORD 包含general-numeric -g, human-numeric -h, month -M, numeric -n, random -R, version -V。 -V, --version-sort按照版本号的自然顺序进行排序。
其他选项
--batch-sizeNMERGE指定一次性合并文件或处理数据时的最大数量超过的数量会使用临时文件。-c, --check, --checkdiagnose-first检查输入数据是否已经排序该操作不会进行排序。-C, --checkquiet, --checksilent同 -c但在发现未排序的行时不会输出提示信息仅以一个错误码退出来指示未排序状态。--compress-programPROG指定外部压缩程序 PROG 来对临时文件进行压缩。使用 PROG -d 来解压缩。--debug使用特殊的标记注释用于排序的行并且对于一些可能的问题输出警告信息到 stderr 。可以帮助理解排序规则。--files0-fromF从文件 F 中读取以 NUL 结尾的所有文件名称来进行排序如果 F 是 - 那么从标准输入中读取文件名。-k, --keyKEYDEF通过指定一个 key 来进行排序通常后面跟 KEYDEF 参数下文有描述用来指定排序键的详细信息。-m, --merge合并已经排序的文件不会进行排序。-o, --outputFILE将排序结果写入指定的输出文件 FILE 而不是打印到标准输出中。-s, --stable通过禁用最后的比较来进行稳定排序。-S, --buffer-sizeSIZE指定排序操作可以使用的最大内存大小超过该值会使用临时文件存储额外的数据。-t, --field-separatorSEP指定字段的分隔符为 SEP 。-T, --temporary-directoryDIR指定 DIR 为临时文件目录来替代默认的 $TMPDIR 或 /tmp多次使用该选项指定多个临时目录。--parallelN指定 sort 命令在执行排序时可以使用的最大并行运行数量。-u, --unique该选项与 -c 共同使用时表示检查文件是否按照严格顺序排序。严格顺序指不仅每行相对于前一行按照指定顺序排列还不能有重复行。不与 -c 使用时则会在排序后去除重复行。-z, --zero-terminated指定以零字符 NULL 字符\0替代默认的换行符\n作为记录分隔符。--help显示帮助信息。--version显示版本信息。
KEYDEF
-k 选项后一般会跟一个 KEYDEF 参数该参数用于定义排序时的起始位置和停止位置。以及可能覆盖全局排序选项的字段和特定的排序选项。
其格式为 F[.C][OPTS][,F[.C][OPTS]]
其中 F 为字段列号表示参与排序的字段列从 1 开始计数。
C 表示字段内字符的位置从 1 开始计数可选如果指定了 C 则排序会从字段的第 C 个字符开始。
OPTS 是一个或多个单字母排序选项如 bdfgiMhnRrV这些参数可以覆盖全局的排序选项。
第二个 F[.C][OPTS] 也是可选的用于指定排序键的结束位置。如果未指定结束位置则默认以行尾为结束。
在使用该参数进行复杂排序的时候可以借助于 --debug 来调试排序行为从而验证自己的排序语法是否正确。
参考示例
1. 对指定文件进行默认排序
sort test.txt首先使用 cat 命令查看 test.txt 中的内容可以发现其每行内容是乱序分布的接着使用 sort 命令对该文件内容进行排序最后输出每行按照字母顺序排列的结果
jayjaylinuxlenovo:~/test$ cat test.txt
aaaa
cccc
ffff
eeee
bbbb
aaaa
jayjaylinuxlenovo:~/test$ sort test.txt
aaaa
aaaa
bbbb
cccc
eeee
ffff2. 对指定文件进行默认排序但忽略相同行
sort -u test.txt 如果文件内容中存在相同的行则可以使用 -u 选项删除重复内容只保留唯一的行。可以看到对例一中的文件使用 -u 排序后原来结果中存在的两行 aaaa 只剩下了一行
jayjaylinuxlenovo:~/test$ sort -u test.txt
aaaa
bbbb
cccc
eeee
ffff3. 对指定文件进行简单的数值排序
sort -n test.txt 如果文件内容中包含普通的数字并且需要按数值的大小进行排序则需要用到 -n 选项。通过本例的演示可以看出如果不使用该选项则排序结果是按照 ASCII 码的值排序但这样得到的结果并不是我们想要的而使用了 -n 后才是真正按数值的大小进行排列的结果
jayjaylinuxlenovo:~/test$ cat test.txt #原内容
12
103
45
1
235
79
66jayjaylinuxlenovo:~/test$ sort test.txt # 普通排序
1
103 #这里按照 ASCII 值排序明显不是我们想要的
12
235
45
66
79
jayjaylinuxlenovo:~/test$ sort -n test.txt # 数值排序
1
12
45
66
79
103
2354. 反转数值排序的结果使用降序排序
sort -rn test.txtsort 默认是升序排列即先小后大使用 -r 选项可以反转为降序排列即从大到小
jayjaylinuxlenovo:~/test$ sort -rn test.txt
235
103
79
66
45
12
15.使用指定的排序模式进行排序
sort -nk 2 -t : test.txt 首先使用 cat 命令确认 test.txt 中的内容然后使用 -n 指定用数值排序-k 2 指定基于第二列进行排序-t : 指定列分隔符为 :
jayjaylinuxlenovo:~/test$ cat test.txt
banana:10:香蕉
apple:30:苹果
orange:8:橙子
pear:25:梨子
cherry:60:樱桃
watermelon:27:西瓜
jayjaylinuxlenovo:~/test$ sort -nk 2 -t : test.txt
orange:8:橙子
banana:10:香蕉
pear:25:梨子
watermelon:27:西瓜
apple:30:苹果
cherry:60:樱桃注意事项 默认情况下sort 命令是按照字符的 ASCII 值进行排序的。这意味着如果排序内容包含数字它们会按照字母顺序而不是数值进行排序这可能导致排序结果与实际不符。例如 10 会排在 2 前面。因此如果想要按照实际的数值排序需要使用 -g 选项。 默认情况下sort 会按照升序排列即从小到大、从 A 到 Z。也可以通过 -r 选项进行从大到小的降序排列。 sort 的 -n 和 -g 选项都能用于数值排序但 -n 选项只能识别一些简单数值形式如整数、浮点数等。而 -g 选项则能处理更广泛的数值表示形式如科学计数法。其在解析复杂数值格式方面更为健壮。但在处理简单的数字时可能没有 -n 的效率高。 默认情况下 -R 选项会使用系统内部生成的随机种子而 --random-sourceFILE 允许用户指定一个文件作为随机数生成的源即随机种子文件。这个选项与 -R 结合使用时可以控制随机排序的结果如果两次随机排序指定了同一个文件并且文件内容没有变则随机排序结果也是相同的。需要注意的是如果该文件包含的内容长度不够时会报错。 -c 和 -C 选项都用于检测输入数据是否经过排序如果检测到是排序后的数据则不会输出任何信息并且以 0 状态码退出。不同的是如果遇到未排序的数据-c 会输出第一个未排序行的信息并以非零错误码退出而 -C 不会输出任何信息仅以一个非零错误码退出来指示未排序状态。 sort 命令的排序顺序会受到系统区域设置locale的影响。为了确保排序结果的一致性可以通过设置 LC_ALLC 来强制使用传统的字节值排序。