linux命令详解:sort
来源:互联网 发布:身高测试软件 编辑:程序博客网 时间:2024/06/07 00:29
【sort 命令】
sort 命令常用于字段排序。
【常用选项】
用法:sort [选项]... [文件]... 或:sort [选项]... --files0-from=F串联排序所有指定文件并将结果写到标准输出。长选项必须使用的参数对于短选项时也是必需使用的。排序选项: -b, --ignore-leading-blanks 忽略前导的空白区域 -d, --dictionary-order 只考虑空白区域和字母字符 -f, --ignore-case 忽略字母大小写 -g, --general-numeric-sort 按照常规数值排序 -i, --ignore-nonprinting 只排序可打印字符 -M, --month-sort 比较 (未知) < "一月" < ... < "十二月" 在LC_ALL=C 时为(unknown) < `JAN' < ... < `DEC' -h, --human-numeric-sort 使用易读性数字(例如: 2K 1G) -n, --numeric-sort 根据字符串数值比较 -R, --random-sort 根据随机hash 排序 --random-source=文件 从指定文件中获得随机字节 -r, --reverse 逆序输出排序结果 --sort=WORD 按照WORD 指定的格式排序: 一般数字-g,高可读性-h,月份-M,数字-n, 随机-R,版本-V -V, --version-sort 在文本内进行自然版本排序其他选项: --batch-size=NMERGE 一次最多合并NMERGE 个输入;如果输入更多 则使用临时文件 -c, --check, --check=diagnose-first 检查输入是否已排序,若已有序则不进行操作 -C, --check=quiet, --check=silent 类似-c,但不报告第一个无序行 --compress-program=程序 使用指定程序压缩临时文件;使用该程序 的-d 参数解压缩文件 --files0-from=文件 从指定文件读取以NUL 终止的名称,如果该文件被 指定为"-"则从标准输入读文件名 -k, --key=位置1[,位置2] 在位置1 开始一个key,在位置2 终止(默认为行尾) -m, --merge 合并已排序的文件,不再进行排序 -o, --output=文件 将结果写入到文件而非标准输出 -s, --stable 禁用last-resort 比较以稳定比较算法 -S, --buffer-size=大小 指定主内存缓存大小 -t, --field-separator=分隔符 使用指定的分隔符代替非空格到空格的转换 -T, --temporary-directory=目录 使用指定目录而非$TMPDIR 或/tmp 作为 临时目录,可用多个选项指定多个目录 -u, --unique 配合-c,严格校验排序;不配合-c,则只输出一次排序结果 -z, --zero-terminated 以0 字节而非新行作为行尾标志 --help 显示此帮助信息并退出 --version 显示版本信息并退出POS 是F[.C][OPTS],F 代表域编号,C 是域中字母的位置,F 和C 均从1开始计数如果没有有效的-t 或-b 选项存在,则从前导空格后开始计数字符。OPTS 是一个或多个由单个字母表示的顺序选项,以此覆盖此key 的全局顺序设置。如果没有指定key 则将其整个行。指定的大小可以使用以下单位之一:内存使用率% 1%,b 1、K 1024 (默认),M、G、T、P、E、Z、Y 等依此类推。如果不指定文件,或者文件为"-",则从标准输入读取数据。
*** 警告 ***
本地环境变量会影响排序结果。
如果希望以字节的自然值获得最传统的排序结果,请设置LC_ALL=C。
【使用说明】
1、sort
比较原则是从首字符开始,依次按ASCII码值进行比较,最后将比较结果按升序输出。
创建一个测试文件 test.txt,内容:
6d7fce9fee471194aa8b5b6e47267f03 ./version.ini8c47b68c23994cf382bd12a3bd4a1fe8 ./plugin.confe45f64ed552ab0176be337ad77f3b3ae ./start.sh6172fad14869bbb949ea1d60c4771f14 ./stop.sh8dd2db4b88727758bb0800c321bafc34 ./test_proc1e142f0d573c5891cc14d8864e073d53 ./test_proc.c
执行命令sort 命令后,输出为
# sort test.txt1e142f0d573c5891cc14d8864e073d53 ./test_proc.c6172fad14869bbb949ea1d60c4771f14 ./stop.sh6d7fce9fee471194aa8b5b6e47267f03 ./version.ini8c47b68c23994cf382bd12a3bd4a1fe8 ./plugin.conf8dd2db4b88727758bb0800c321bafc34 ./test_proce45f64ed552ab0176be337ad77f3b3ae ./start.sh
2、-t 选项 和-k 选项
# sort -k 2 -t "." test.txt8c47b68c23994cf382bd12a3bd4a1fe8 ./plugin.confe45f64ed552ab0176be337ad77f3b3ae ./start.sh6172fad14869bbb949ea1d60c4771f14 ./stop.sh8dd2db4b88727758bb0800c321bafc34 ./test_proc1e142f0d573c5891cc14d8864e073d53 ./test_proc.c6d7fce9fee471194aa8b5b6e47267f03 ./version.ini
sort -k 2 -t "." test.txt,根据符号“.”分割字符串,并以 分割后的test.txt 文件中的第2列进行排序。
3、-n 选项
10比2用 sort 命令排序的时候,可能会出现10比较小的情况。这是因为排序程序将数字按字符来排序,排序程序会先比较1和2,显然1小,所以就将10放在2前面。这也是sort的一贯作风。 如果要改变这种排序方式,就要使用-n选项,指定以数值来排序。
4、-r 选项
sort默认的排序方式是升序,如果想改成降序
]# sort -r -k 2 -t "." test.txt6d7fce9fee471194aa8b5b6e47267f03 ./version.ini1e142f0d573c5891cc14d8864e073d53 ./test_proc.c8dd2db4b88727758bb0800c321bafc34 ./test_proc6172fad14869bbb949ea1d60c4771f14 ./stop.she45f64ed552ab0176be337ad77f3b3ae ./start.sh8c47b68c23994cf382bd12a3bd4a1fe8 ./plugin.conf
5、-o 选项
# sort -r -k 2 -t "." test.txt -o test.txt# cat test.txt6d7fce9fee471194aa8b5b6e47267f03 ./version.ini1e142f0d573c5891cc14d8864e073d53 ./test_proc.c8dd2db4b88727758bb0800c321bafc34 ./test_proc6172fad14869bbb949ea1d60c4771f14 ./stop.she45f64ed552ab0176be337ad77f3b3ae ./start.sh8c47b68c23994cf382bd12a3bd4a1fe8 ./plugin.conf
6、-f 选项
将小写字母都转换为大写字母来进行比较,即忽略大小写
在一个项目中,有过类似的经历:使用 php 的 exec() 函数执行命令:sort -k 2 -t"." 结果是:
6d7fce9fee471194aa8b5b6e47267f03 ./VERSION.ini8c47b68c23994cf382bd12a3bd4a1fe8 ./plugin.confe45f64ed552ab0176be337ad77f3b3ae ./start.sh6172fad14869bbb949ea1d60c4771f14 ./stop.sh8dd2db4b88727758bb0800c321bafc34 ./test_proc1e142f0d573c5891cc14d8864e073d53 ./test_proc.c
但是在Linux中执行同样的命令,结果则是如同加上f 选项
# sort -f -k 2 -t"." test.txt8c47b68c23994cf382bd12a3bd4a1fe8 ./plugin.confe45f64ed552ab0176be337ad77f3b3ae ./start.sh6172fad14869bbb949ea1d60c4771f14 ./stop.sh8dd2db4b88727758bb0800c321bafc34 ./test_proc1e142f0d573c5891cc14d8864e073d53 ./test_proc.c6d7fce9fee471194aa8b5b6e47267f03 ./VERSION.ini
解决方法可以在php 中,使用 exec() 函数执行命令:sort -f -k 2 -t"." 。
继续探讨上面的问题,怀疑是跟本地环境变量或者编码存在关系,测试一下:
~$ localeLANG=en_US.UTF-8LANGUAGE=en_US:LC_CTYPE="en_US.UTF-8"LC_NUMERIC="en_US.UTF-8"LC_TIME="en_US.UTF-8"LC_COLLATE="en_US.UTF-8"LC_MONETARY="en_US.UTF-8"LC_MESSAGES="en_US.UTF-8"LC_PAPER="en_US.UTF-8"LC_NAME="en_US.UTF-8"LC_ADDRESS="en_US.UTF-8"LC_TELEPHONE="en_US.UTF-8"LC_MEASUREMENT="en_US.UTF-8"LC_IDENTIFICATION="en_US.UTF-8"LC_ALL=
~$ sort -k 2 -t"." test.txt8c47b68c23994cf382bd12a3bd4a1fe8 ./plugin.confe45f64ed552ab0176be337ad77f3b3ae ./start.sh6172fad14869bbb949ea1d60c4771f14 ./stop.sh8dd2db4b88727758bb0800c321bafc34 ./test_proc1e142f0d573c5891cc14d8864e073d53 ./test_proc.c6d7fce9fee471194aa8b5b6e47267f03 ./VERSION.ini
修改一下编码方式
~$ export LC_ALL=zh_CN.UTF-8:~$ localeLANG=en_US.UTF-8LANGUAGE=en_US:LC_CTYPE="zh_CN.UTF-8"LC_NUMERIC="zh_CN.UTF-8"LC_TIME="zh_CN.UTF-8"LC_COLLATE="zh_CN.UTF-8"LC_MONETARY="zh_CN.UTF-8"LC_MESSAGES="zh_CN.UTF-8"LC_PAPER="zh_CN.UTF-8"LC_NAME="zh_CN.UTF-8"LC_ADDRESS="zh_CN.UTF-8"LC_TELEPHONE="zh_CN.UTF-8"LC_MEASUREMENT="zh_CN.UTF-8"LC_IDENTIFICATION="zh_CN.UTF-8"LC_ALL=zh_CN.UTF-8~$ sort -k 2 -t"." test.txt6d7fce9fee471194aa8b5b6e47267f03 ./VERSION.ini8c47b68c23994cf382bd12a3bd4a1fe8 ./plugin.confe45f64ed552ab0176be337ad77f3b3ae ./start.sh6172fad14869bbb949ea1d60c4771f14 ./stop.sh8dd2db4b88727758bb0800c321bafc34 ./test_proc1e142f0d573c5891cc14d8864e073d53 ./test_proc.c
可见本地环境变量中指定的编码方式确实对 sort 结果存在影响。至于php为什么会出现这种问题,将继续探究......
7、-c 选项
使用-r选项例子中执行后的文件
# cat test.txt6d7fce9fee471194aa8b5b6e47267f03 ./version.ini1e142f0d573c5891cc14d8864e073d53 ./test_proc.c8dd2db4b88727758bb0800c321bafc34 ./test_proc6172fad14869bbb949ea1d60c4771f14 ./stop.she45f64ed552ab0176be337ad77f3b3ae ./start.sh8c47b68c23994cf382bd12a3bd4a1fe8 ./plugin.conf
# sort -c test.txtsort:test.txt:2:无序: 1e142f0d573c5891cc14d8864e073d53 ./test_proc.c
检查到文件乱序,输出第一个乱序的行的相关信息,并返回1
8、-C 选项
检查文件是否已排好序,如果是乱序则不输出内容,仅是返回1
0 0
- linux sort 命令详解
- linux sort 命令详解
- linux sort 命令详解
- Linux sort命令详解
- linux sort 命令详解
- linux sort 命令详解
- linux sort 命令详解
- linux sort 命令详解
- linux sort 命令详解
- linux sort 命令详解
- linux sort 命令详解
- Linux sort命令详解
- Linux sort命令详解
- linux sort 命令详解
- linux sort 命令详解
- linux sort 命令详解
- linux sort 命令详解
- linux sort 命令详解
- android 设置默认弹出框样式
- nodejs npm常用命令
- ListView之Item click事件与Item中的控件点击事件共存
- 使用 Capistrano 部署总结
- map源码解析
- linux命令详解:sort
- XCode7,打包上传的一些警告,及参考处理方法
- MySQL存储过程详解 mysql 存储过程
- JQuery Ajax跨域的问题
- python学习笔记 ---- 关于URLError和HTTPError
- CF 703D 树状数组离线,前驱思想
- HDU 5288 OO’s Sequence(数学)——2015 Multi-University Training Contest 1
- Windows下的maven安装及配置
- SpringMVC上传文件过大,异常捕获问题。