页面

分类

善用sort命令

2018/1/2, by wingfire ; 分类: 计算机技术; 0 comments

文本处理的时候难免需要排序,sort就是用来排序的工具.然而如果对sort不够熟悉,那很多时候不免觉得sort也力不从心.了解这些功能,可以让sort的能力更上一个台阶,见下表.

选项长度描述
-b--ignore-leading-blanks默认情况下,对整行进行排序,从每行的第一个字符开始。这个选项导致 sort 程序忽略 每行开头的空格,从第一个非空白字符开始排序。
-f--ignore-case让排序不区分大小写。
-n--numeric-sort基于字符串的数值来排序。使用此选项允许根据数字值执行排序,而不是字母值。
-r--reverse按相反顺序排序。结果按照降序排列,而不是升序。
-k--key=field1[,field2]对从 field1到 field2之间的字符排序,而不是整个文本行
-m--merge把每个参数看作是一个预先排好序的文件。把多个文件合并成一个排好序的文件,而没有执行额外的排序
-o--output=file把排好序的输出结果发送到文件,而不是标准输出
-t--field-separator=char定义域分隔字符。默认情况下,域由空格或制表符分隔

大部分很很好理解.-n可以按照实际数字排序,而没有的话就是按照字典排序.有了-n就可以避免11排在9前面这种尴尬了.-k对于多字段文本特别有用,比如让ls的结果按照文件大小排序,可以这么写:

ls -l /usr/bin | sort -nr -k 5

我有时还需要按照字段的特定方式排序,例如对于MM/DD/YYYY格式的日期,想按照时间排序,sort也可以做到:

Ubuntu         8.10  10/30/2008

sort -k 3.7nbr -k 3.1nbr -k 3.4nbr distros.txt

上面例子中的3表示第三个字段,.7表示字段的第7个字符开始,因为同时指定了-n,-k 3.7n 合起来就是第3个字段的地7个字符开始的数值.多个-k表示先按第一个k指定的字段排,在相同值的情况下再按后面的k指定字段排序.

通常sort以空白作为字段的分隔符,但是也可以用-t指定其他的分隔符.

-m可以用来合并多个已经排好序的文件到一个文件中

还有个-u参数,可以对排好序的结果做uniq,不必再调用uniq命令去重.

添加评论:

 
 the email would not displayed
 

您可以使用 Markdown 语法。

您必须启用浏览器的 JavaScript 功能才能发表评论。