
Linux———sort命令总结详解(狠狠爱住)
在默认情况下,sort命令会按照每一行的第一个字符进行排序,如果某一行的第一个字符是空格或制表符,那么它就会被排到较前或较后的位置,而这可能并不符合我们的实际需求。具体来说,如果我们有一个包含一些单词和符号的文本文件,并且希望只按照单词进行排序,可以使用。例如,我们创建一个名为。但有些情况下,文件中的字段可能用其他字符分隔,或者需要按照文件中的某一列进行排序。可以看到,排序结果是根据字符串的字典顺
目录
-d 选项是 sort 命令中一个非常有用的选项,它可以按照字典顺序进行排序,同时忽略非字母数字字符。
-f 选项是 sort 命令中的一个常用选项,它可以在排序时忽略大小写。
-g 选项是 sort 命令中的一个选项,它可以按照一般数值进行排序。
-i 选项是 sort 命令中的一个选项,它可以在排序时不区分大小写。
-M 选项是 sort 命令中的一个选项,它可以按照月份进行排序。
-r 选项是 sort 命令中的一个选项,它可以进行反向排序。
sort命令:
它用于对文本文件进行排序,默认情况下按照字典序升序排列。
命令参数及描述:
参数 | 描述 |
---|---|
-b |
忽略行首的空白字符 |
-d |
按字典顺序进行排序,忽略非字母数字字符 |
-f |
忽略大小写 |
-g |
按一般数值进行排序 |
-i |
不区分大小写进行排序 |
-M |
按月份进行排序 |
-n |
按数值进行排序 |
-r |
反向排序 |
-t |
指定字段分隔符 |
-k |
指定要排序的字段 |
示例:
使用-b参数,忽略行首空白字符,按照第一列进行排序:
忽略行首的空白字符是为了避免空格、制表符等空白字符对排序结果的影响。
在默认情况下,sort命令会按照每一行的第一个字符进行排序,如果某一行的第一个字符是空格或制表符,那么它就会被排到较前或较后的位置,而这可能并不符合我们的实际需求。
例如,在下面的data.txt文件中,第一列数字前有不同数量的空格:
1 Apple
2 Orange
3 banana
如果不忽略行首的空白字符,使用sort命令进行排序,结果如下:
$ sort data.txt
1 Apple
2 Orange
3 banana
这显然不符合我们的期望,因为数字应该是主要的排序依据。如果忽略行首的空白字符,使用-b参数进行排序,结果如下:
$ sort -b data.txt
1 Apple
2 Orange
3 banana
这样就可以按照数字大小进行正确的排序了。
-d
选项是 sort 命令中一个非常有用的选项,它可以按照字典顺序进行排序,同时忽略非字母数字字符。具体来说,如果我们有一个包含一些单词和符号的文本文件,并且希望只按照单词进行排序,可以使用
-d
选项去掉符号和空格等非字母数字字符。例如,我们创建以下文本文件
words.txt
:
接下来,我们添加一些符号和空格到文件中:
如果我们运行以下命令进行排序,会发现空格和空行也会被排序:
sort words.txt
输出结果如下:
但如果我们使用
-d
选项,sort 命令就会忽略这些符号和空格,只按照单词进行排序:
sort -d words.txt
输出结果如下:
可以看到,这次排序结果与我们最初的文件内容相同,符号和空格已经被忽略了。
-f
选项是 sort 命令中的一个常用选项,它可以在排序时忽略大小写。再使用上面所说的
words.txt
的文件,其中banana,orange开头变成大写字母,希望按照字母顺序对它们进行排序。首先我们运行以下命令进行排序:
sort words.txt
输出结果如下:
Banana
Orange
apple
pear
可以看到,排序结果是区分大小写的,大写字母会排在小写字母之前。
但是,如果我们使用
-f
选项,sort 命令将忽略大小写进行排序:
sort -f words.txt
输出结果如下:
apple
Banana
Orange
pear
可以看到,这次排序结果是忽略大小写的,所有单词都按照字母顺序排列
-g
选项是 sort 命令中的一个选项,它可以按照一般数值进行排序。创造一个包含一些数字的文本文件,并且希望按照数值大小对它们进行排序。
例如,创建一个名为
numbers.txt
的文件,内容如下:
10
2
5
1
如果我们运行以下命令进行排序:
sort numbers.txt
输出结果如下:
1
10
2
5
可以看到,排序结果是根据字符串的字典顺序排列的,而不是按照数值大小排列的。
但是,如果我们使用
-g
选项,sort 命令将按照一般数值进行排序:
sort -g numbers.txt
输出结果如下:
1
2
5
10
可以看到,这次排序结果是按照数值大小从小到大排列的。
需要注意的是,使用
-g
选项时,sort 命令会将每行的第一个数值作为排序的依据。如果文件中存在非数字字符,则会被视为0进行排序。
-i
选项是 sort 命令中的一个选项,它可以在排序时不区分大小写。还是那个包含一些水果单词的文本文件,并且希望按照字母顺序对它们进行排序。内容为:
apple Banana orange Pear
如果我们运行以下命令进行排序:
sort words.txt
输出结果如下:
Banana
Pear
apple
orange
可以看到,排序结果是区分大小写的,大写字母会排在小写字母之前。
但是,如果我们使用
-i
选项,sort 命令将不区分大小写进行排序:
sort -i words.txt
输出结果如下:
apple
Banana
orange
Pear
可以看到,这次排序结果是不区分大小写的,所有单词都按照字母顺序排列。
-M
选项是 sort 命令中的一个选项,它可以按照月份进行排序。创建一个包含一些日期的文本文件,并且我们希望按照月份对它们进行排序。例如,我们创建一个名为
dates.txt
的文件,内容如下:
January 1
March 15
April 5
February 10
如果我们运行以下命令进行排序:
sort dates.txt
输出结果如下:
April 5
February 10
January 1
March 15
可以看到,排序结果是根据字符串的字典顺序排列的,而不是按照月份顺序排列的。
但是,如果我们使用
-M
选项,sort 命令将按照月份进行排序:
sort -M dates.txt
输出结果如下:
January 1
February 10
March 15
April 5
可以看到,这次排序结果是按照月份顺序排列的。
需要注意的是,
-M
选项会将日期解释为月份,而不是日期加上年份。如果日期中包含了年份信息,排序结果可能不准确。
-r
选项是 sort 命令中的一个选项,它可以进行反向排序。还是那个名为
words.txt
的水果单词文件,内容如下:
apple banana orange pear
如果我们运行以下命令进行排序:
sort words.txt
输出结果如下:
apple banana orange pear
可以看到,排序结果是按照字母顺序从小到大排列的。
但是,如果我们使用
-r
选项,sort 命令将进行反向排序:
sort -r words.txt
输出结果如下:
pear orange banana apple
可以看到,这次排序结果是按照字母顺序从大到小排列的。
-r
选项可以与其他选项(如-n
或-M
)一起使用,以实现不同类型的反向排序。
使用-t参数,指定字段分隔符为逗号,按照第二列进行排序:
在默认情况下,sort命令按照空格作为字段分隔符,并以每一行的第一个字段作为排序依据。
但有些情况下,文件中的字段可能用其他字符分隔,或者需要按照文件中的某一列进行排序。
我们现在变一下数据文件data.txt,其中每一行包含两个字段,以逗号为分隔符:
John,45
Mary,30
Peter,24
我们可以使用sort命令按照第二列进行排序,使用-t参数指定逗号为字段分隔符,-k参数指定按照第二列排序:
sort -t "," -k 2 data.txt
这样,sort命令就会按照文件中每一行的第二个字段(即数字)进行排序,输出的结果为:
Peter,24
Mary,30
John,45
这就是使用-t参数指定字段分隔符来进行排序的操作,可以让sort命令更灵活地处理不同的数据格式。
sort
命令中的-k
选项用于指定排序的关键字(或称为字段)。这个选项非常强大,因为它允许你根据行中的特定部分进行排序,而不是整个行。基本语法
sort -k [start],[end][options] file
[start],[end]
:指定排序关键字的起始和结束位置。这可以是字段号(对于基于字段的排序)或字符位置(对于基于字符的排序)。[options]
:可以附加一些选项来修改排序行为,比如n
(按数值排序)或r
(逆序排序)。file
:要排序的文件名。字段排序
当使用字段排序时,
[start],[end]
部分指定了基于哪个或哪些字段进行排序。字段默认由空白字符(空格或制表符)分隔。
- 如果只指定一个字段号,如
-k 2
,则只考虑该字段。- 如果指定了起始和结束字段号,如
-k 2,3
,则排序将基于这两个字段的组合。但是,这通常用于更复杂的排序需求,比如先按一个字段排序,然后在该字段相同的情况下再按另一个字段排序。示例
假设有一个文件
data.txt
,内容如下:如果你想按第二个字段(数字)进行排序,可以使用:sort -k 2,2n data.txt
输出将是:
banana 5 apple apple 10 orange cherry 20 banana
这里的 -k 2,2n 表示只考虑第二个字段,并按数值进行排序。字符位置排序
除了基于字段排序外,
-k
选项还可以用于基于字符位置的排序。这在处理固定宽度字段或没有字段分隔符的数据时非常有用。
- 字符位置从1开始计数。
- 可以使用
.
来指定字段的结束位置(对于基于字段的排序,这通常不是必需的,因为字段默认由空白字符分隔)。- 可以使用
$
来表示行的末尾。示例
假设有一个文件
fixed.txt
,内容如下(每个字段都是固定宽度的):12345apple 98765banana 54321cherry
如果你想按前5个字符(即数字部分)进行排序,可以使用:sort -k 1,5n fixed.txt
但在这个特定例子中,由于字段是固定宽度的,并且数字位于行的开头,你也可以简单地使用-k 1,1n
(尽管这实际上是多余的,因为-k 1n
就足够了,因为sort
会默认使用整个字段进行排序,直到遇到分隔符或行尾)。不过,为了清晰起见,我们可以使用-k 1,5
来明确表示我们正在考虑前5个字符:sort -k 1,5n fixed.txt
或者更简洁地:sort -k 1.1,5 fixed.txt
但请注意,.1 在这里不是必需的,因为 sort会默认从指定字段的开头开始排序。然而,在某些情况下,它可能会使你的意图更加清晰。不过,在这个固定宽度的例子中,最简洁且正确的方法是:
sort -k 1,1n fixed.txt
因为-k 1n
已经足够表示按第一个字段(在这里,前5个字符被视为一个字段)进行数值排序。
放在文末的话:
sort
命令是用于对文本文件进行排序的常用命令。
它可以按照不同的排序规则(如字典顺序、数值大小等)对文件的行进行排序,并将结果输出到终端或新文件中。
通过使用不同的选项,可以满足各种不同的排序需求。
sort
命令的使用灵活简单,是处理文本排序的有力工具。
更多推荐
所有评论(0)