对流输出进行排序
我们还可以将 sort 命令应用于流的输出,例如管道运算符:
ls -n | sort -t, -k5
这将按文件大小对 ls 命令生成的文件列表的输出进行排序,从最大的文件开始。
-n 运算符指定数字排序而不是字母排序。
sort的基本规则
sort 命令重新排列文本文件中的行,以按数字和字母顺序对行进行排序。
sort 命令的默认规则是:
- 以数字开头的文本出现在以字母开头的文本之前;较低的数字先排序。
- 以字母表中出现在其他文本条目的第一个字母之前的字母开头的文本排在以字母表中出现较晚的字母开头的文本之前。
- 当文本以同一个字母的大写和小写实例开头时,首先对小写实例进行排序。
对文本文件排序
要对带分隔符的 Linux 文件中的行进行排序,请使用 sort 命令,如下所示:
sort -k2 table1.txt
该命令根据从第二列(k2 指第二列)开始的字符对文件 table1.txt 进行排序。
假设输入文件内容为:
1, Justin, Timberlake, Title 545, Price .30 2, Taylor, Swift, Title 723, Price .90 3, Mick, Jagger, Title 610, Price .90 4, Lady, Gaga, Title 118, Price .30 5, Johnny, Cash, Title 482, Price .50 6, Elvis, Presley, Title 335, Price .30 7, John, Lennon, Title 271, Price .90 8, Michael, Jackson, Title 373, Price .50
由于本例中的第二列包含名字,排序后的输出按第二列中每个人的名字的第一个字母排列,如下所示:
6, Elvis, Presley, Title 335, Price .30 7, John, Lennon, Title 271, Price .90 5, Johnny, Cash, Title 482, Price .50 1, Justin, Timberlake, Title 545, Price .30 4, Lady, Gaga, Title 118, Price .30 8, Michael, Jackson, Title 373, Price .50 3, Mick, Jagger, Title 610, Price .90 2, Taylor, Swift, Title 723, Price .90
如果使用 -k3 对文件进行排序(使用从第 3 列(姓氏列)开始的行内容),则输出为:
5, Johnny, Cash, Title 482, Price .50 4, Lady, Gaga, Title 118, Price .30 8, Michael, Jackson, Title 373, Price .50 3, Mick, Jagger, Title 610, Price .90 7, John, Lennon, Title 271, Price .90 6, Elvis, Presley, Title 335, Price .30 2, Taylor, Swift, Title 723, Price .90 1, Justin, Timberlake, Title 545, Price .30
-k5 生成按价格排序的列表:
4, Lady, Gaga, Title 118, Price .30 7, John, Lennon, Title 271, Price .90 6, Elvis, Presley, Title 335, Price .30 8, Michael, Jackson, Title 373, Price .50 5, Johnny, Cash, Title 482, Price .50 1, Justin, Timberlake, Title 545, Price .30 3, Mick, Jagger, Title 610, Price .90 2, Taylor, Swift, Title 723, Price .90
无效。
该命令不是按价格排序,而是按标题编号对列表进行排序。
好吧,除非给定分隔符,它将每一行分成几列,否则它会使用空格。
由于每个标题条目中间有一个空格,因此每个条目的第四列成为单词“标题”,第五列成为标题编号。
使用 -t 标志指定排序的分隔符。
这可以准确控制命令分隔列的位置。
sort -t, -k5 table1.txt
这会产生所需的结果:
8, Michael, Jackson, Title 373, Price .50 5, Johnny, Cash, Title 482, Price .50 1, Justin, Timberlake, Title 545, Price .30 4, Lady, Gaga, Title 118, Price .30 6, Elvis, Presley, Title 335, Price .30 2, Taylor, Swift, Title 723, Price .90 3, Mick, Jagger, Title 610, Price .90 7, John, Lennon, Title 271, Price .90
通常,我们需要指定分隔符。
它可以防止不必要的混淆和不准确的结果。
对于可能并不总是明显不正确的较大文件尤其如此。
保存排序文件
对文件进行排序并不会保存它。
要将排序后的列表保存在文件中,请使用重定向运算符:
sort -k6 table1.txt > test_new.txt
其中 test_new.txt 是新文件。
倒序排序
-r 选项将排序结果倒转。
例如,使用上面的结果:
sort -r -t, -k5 table1.txt
输出
7, John, Lennon, Title 271, Price .90 3, Mick, Jagger, Title 610, Price .90 2, Taylor, Swift, Title 723, Price .90 6, Elvis, Presley, Title 335, Price .30 4, Lady, Gaga, Title 118, Price .30 1, Justin, Timberlake, Title 545, Price .30 5, Johnny, Cash, Title 482, Price .50 8, Michael, Jackson, Title 373, Price .50
只要每个元素都以某种方式分隔,Linux 文本文件中的数据就可以使用 sort 命令进行排序。
通常,逗号用作分隔信息的分隔符。
日期:2020-07-15 11:16:46 来源:oir作者:oir