1. sort的工作原理 sort将文件的每一行作为一个单位,相互比较,比较原则是从首字符向后,一次按ASCLL码值进行比较,最后将他们按升序输出。 2. 参数 -u选项,就是在输出行中去除重复行。 去除文件重复行: 1. sort+uniq sort -n test.txt | uniq 2. sort + awk sort -n $file | awk ‘{if ($0!=line)print;line=$0}’ 3. sort+sed sort -n f i l e ∣ s e d ′ file | sed ' file∣sed′!N; /^.∗\n\1$/!P; D’(现在没看懂啥意思,有时间去了解一下。) -r选项,sort默认的排序方式是升序,就加个-r就搞定了。 -o选项,由于sort默认是把结果输出到标准输出,所以需要用重定向才能将结果写入文件,形如sort filename > newfile。如果你想把排序结果输出到原文件中,用重定向可就不行了。当你用重定向的时候会把原文件清空。在这个时候,-o选项,解决了这个问题。 -n选项,因为sort默认是按照字符来进行排序的,使用-n,告诉sort,“以数值来排序” -t选项和-k选项, 荔汁: 文件fruit.txt apple:10:2:5 orange:20:3:4 banana:30:5:5 pear:90:2:3 这个文件有三列,列与列之间用冒号隔开了,第一列表示水果类型,第二列表示水果数量,第三列表示水果价格。 我想以水果数量来排序,也就是第二列来排序,如何利用sort实现? sort的-t选项,后面可以设定间隔符。(整理到这,我想起了cut,作者也想起来了哈哈。。。他还了解paste的-d选项,) 指定了间隔符之后,就可以用-k来指定列数了。 sort -n -k 2 -t : fruit.txt apple:10:2:5 orange:20:3:4 banana:30:5:5 pear:90:2:3 我们使用冒号作为间隔符,并针对第二列来进行数值升序排序 其他选项: -f,会将小写字母都转换为大写字母进行比较–忽略大小写。 -c,会检查文件是否已排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1 -C,会检查文件是否已排好序,如果乱序,不输出内容,仅返回1 -M,会以月份来排序,比如JAN小于FEB等等 -b,会忽略每一行前面的所有空白部分,从第一个可见字符开始比较