要排序的项目必须以某种方式分隔
只要每个元素都以某种方式分隔, Linux文本文件中的数据就可以使用排序命令排序。 通常,逗号用作分隔信息的分隔符。
基本排序规则
排序命令重新排列文本文件中的行以按数字和字母顺序对它们进行排序。 sort命令的默认规则是:
- 以数字开头的文本出现在以字母开头的文本之前; 较低的数字首先排序。
- 以字母出现在字母表中的文本开头,其中的其他文字条目的第一个字母在以字母后面出现的字母开头的文本之前排序。
- 在文本以同一字母的大写和小写实例开始的地方,小写实例首先被排序。
排序文本文件
为了对分隔的Linux文件中的行进行排序,可以使用sort 命令,如下所示:
$ sort -k2 test.txt根据从第二列开始的字符(k2指第二列)对文件“test.txt”进行排序。 假设输入文件的内容是:
1,Justin Timberlake,标题545,售价$ 7.30 2,Taylor Swift,标题723,售价$ 7.90 3,Mick Jagger,标题610,售价7.90美元4,Lady Gaga,标题118,售价$ 7.30 5,Johnny Cash,标题482,售价$ 6.50 6,Elvis Presley,标题335,售价$ 7.30 7,John Lennon,标题271,售价$ 7.90 8,Michael Jackson,标题373,售价$ 5.50由于本示例中的第二列包含名和姓,排序后的输出按第二列中每个人的名字的第一个字母排列 - Elvis,John,Johnny,Justin,Lady,Michael,Mick和Taylor , 如下所示:
6,Elvis Presley,标题335,售价$ 6.30 7,John Lennon,标题271,售价$ 7.90 5,Johnny Cash,标题482,售价$ 6.50 1,Justin Timberlake,标题545,售价$ 6.30 4,Lady Gaga,标题118,售价$ 6.30 8,迈克尔杰克逊,标题373,价格$ 5.50 3,Mick Jagger,标题610,价格$ 7.90 2,Taylor Swift,标题723,价格$ 7.90如果使用-k3对文件进行排序(使用从第3列开始的行内容 - 标题编号列),则输出为:
4,Lady Gaga,标题118,价格$ 6.30 7,John Lennon,标题271,价格$ 7.90 6,Elvis Presley,标题335,价格$ 6.30 8,Michael Jackson,标题373,售价$ 5.50 5,Johnny Cash,标题482,售价$ 6.50 1,Justin Timberlake,标题545,售价$ 6.30 3,Mick Jagger,标题610,价格$ 7.90 2,Taylor Swift,标题723,售价7.90美元和
$ sort -k4 test.txt产生按价格排序的列表:
8,Michael Jackson,标题373,价格$ 5.50 1,Justin Timberlake,标题545,售价$ 6.30 4,Lady Gaga,标题118,售价$ 6.30 6,Elvis Presley,标题335,售价$ 6.30 5,Johnny Cash,标题482,售价$ 6.50 2,Taylor Swift,Title 723,售价7.90美元3,Mick Jagger,标题610,售价7.90美元7,John Lennon,标题271,售价7.90美元反转排序
-r选项反转排序。 例如,使用上面的结果:
$ sort -k4 -r test.txt收益率:
价格$ 7.90 3,Mick Jagger,标题610,价格$ 7.90 2,Taylor Swift,标题723,价格$ 7.90 5,Johnny Cash,标题482,价格$ 6.50 6,Elvis Presley,标题335,价格$ 6.30 4,Lady Gaga,标题118,售价$ 6.30 1,Justin Timberlake,标题545,售价$ 6.30 8,Michael Jackson,标题373,售价$ 5.50保存排序文件
排序文件不会保存它。 要将排序列表保存在文件中,请使用重定向运算符:
sort -k4 -r test.txt> test_new.txt其中“test_new.txt”是新文件。
对流输出进行排序
您还可以将sort命令应用于流的输出,如管道运算符:
$ ls -al | sort -r -n -k5这会按照文件大小对由ls命令生成的文件列表的输出进行排序,从最大的文件开始。 -n运算符指定数字排序而不是字母。