Linux中sort命令用法 09 June 2013
sort命令时Linux中一个非常有用的命令,它常见的参数和意义如下:
-
-c--check只检查文件是否已排序,而不进行排序。 -
-m--merge合并已经排好序的文件。 -
-o--output=FILE将排序结果保存到指定文件中,通常用于将结果保存到原文件中(这种情况用输出重定向不能完成)。
-
-s--stablesort命令默认是不稳定的排序,此选项使排序结果稳定。 -
-u--unique对排序键值相同的行只保留一行。默认情况下,sort | uniq等效于sort -u,但是在指定了排序key时则不同。 -
-b--ignore-leading-blanks忽略前导空格。 -
-R--random-sort随机排序,每次运行的结果均不同。 -
-n--numeric按字符串的数值来比较。 -
-r--reverse倒序排序。 -
-t--field-separator=SEP设置字段分隔符,默认的分隔符是non-blank to blank transition。 -
-f--ignore-case开启此选项则忽略大小写进行比较。然而,有可能在Linux中,默认情况下已经是忽略大小写的排序了,这是因为locale的原因。sort命令的帮助中有如下警告:
*** WARNING *** The locale specified by the environment affects sort order. Set LC_ALL=C to get the traditional sort order that uses native byte values.
sort命令会根据当前的locale来决定一些字符串的比较结果,这样,在不同的机器中,即使输入数据相同,也有可能因为locale不同而导致排序结果不同。因此,如果排序结果不符合预期的话,不妨
echo $LC_ALL看看是否为C,如果不是,可以执行export LC_ALL=C。 -
-k--key=KEYDEF指定排序key,格式为F[.C][OPTS][,F[.C][OPTS]]。例如
sort -t: -k2,2n -k4,4nr input.txt表示以冒号为分隔符,首先以数值方式比较第二列,如果相同,再以逆序数值方式比较第四列,列数是从1开始的。而sort -k2.1,2.2 input.txt表示比较第二列的前两个字符来排序。key的结束位置默认为行尾,因此
sort -k2 input.txt表示的是比较第二列开始到行尾的字符串,而不仅仅是第二列。因此,如果需要,尽量定义多个key,而不是一个跨列的key。
reference
http://www.skorks.com/2010/05/sort-files-like-a-master-with-the-linux-sort-command-bash/
本文出自夜惊心的博客,转载请保留出处blog comments powered by Disqus