sort
用来排序,缺省是对整行文件进行排序。比较难于理解的是Sort支持指定字段排序。
sort支持字段比较,用好这个功能常常可以省去比如用awk
来截取字段再排序这样的操作,大大地简化操作。
先上示例
先看一完例子,有了功能上的认识之后,再看【关于sort的字段】一节的说明。
第二字段作为Key排序
第二字段到最后一个字段(即行尾)作为Key排序
第二字段作为Key排序,从第3个字段开始算(即忽略这个字段的前面2个字符)
忽略字段开头的空白
缺省字段的值是包含前面空白的。即这样当分隔字段的空白不一致时(有使用Tab、有一个空格,有2个空格),排序就乱了。
选项-b, --ignore-leading-blanks
即忽略字段开头的空白。字段声明中可以有选项。
多个排序Key
有用的排序选项
调整输出
-r, --reverse
反序输出-u, --unique
去重。即如果有多个相同的,只输出一个。-b, --ignore-leading-blanks
忽略开头的空白-R, --random-sort
随机排序,效果上不是排序,是打乱。
# 实际上是以内容的Hash值来排序。
排序方式
-n, --numeric-sort
按数字类型排序,1 < 02 < 3
。
如果按字符排序,则是02 < 1 < 3
。-g, --general-numeric-sort
按数字类型排序,支持通用记数,即认识1.234E10
。会更慢并且有舍入问题(可能1.2345678 > 1.2345679
)
详见What’s the difference between –general-numeric-sort and –numeric-sort options in gnu sort-V, --version-sort
以版本号的方式排序。这个功能很霸气啊!-M, --month-sort
以月份的方式排序。(unknown) < JAN < ... < DEC
-h, --human-numeric-sort
数据值排序,识别K M G后缀,如2K 1G 1.1M
关于sort的字段
选项是-k, --key=KEYDEF
。
KEYDEF = pos1[,pos2]
。
表示以行的第pos1到第pos2(包含)的内容作为排序的Key。
字段的格式是F[.C][OPTS]
,F
是第几字段,C
是从第几个字符开始(即忽略这个字符前面字符的差异)。
F
和C
都是从1开始。pos2
字段的C
为0时,表示是这个字段的最后一个字符。
pos1
字段的C
缺省是1,pos2
字段的C
缺省是0。
参考资料
- gnu manual 7.1 sort: Sort text files
- What’s the difference between –general-numeric-sort and –numeric-sort options in gnu sort
FEATURED TAGS
生活
blog
Java
shell
Unix/Linux
unix
Groovy
jms
mom
middleware
extension
log4j
philosophy
原则
最佳实践
Shell
generic
gnu
windows
cmd
tips
dubbo
Service
设计
class
date
i/o
api
design
服务
优劣
Linux
git
week
日期
星期
计算
月份
命令行
配置
Windows
Dubbo
约定
权限
Command Line
发布
java
cooma
release
微容器
github
microcontainer
扩展点
容器