文件排序
时间:2019-04-29 03:17:27 来源:igfitidea点击:
如何使用sort命令对文件进行排序
Linux Sort命令示例
Linux中的sort命令允许您将文件或标准输入逐行排序为特定条件。以其最简单的形式,您可以按字母顺序或数字顺序进行排序。但是,通过向命令添加各种参数,您可以轻松定制排序结果。
排序数字
number.txt文件的内容如下:
john@john-desktop:~/test_examples$ cat numbers.txt 2 8 6 4 1 9 3 5 7 john@john-desktop:~/test_examples$ sort numbers.txt 1 2 3 4 5 6 7 8 9
Linux如何逆序排序
john@john-desktop:~/test_examples$ sort -r numbers.txt 9 8 7 6 5 4 3 2 1
如果您有类似1、10、100、2、20、200
的数字。当对它们进行默认排序时,您会看到数字10和100
出现在数字2和3 ....
之前。
john@john-desktop:~/test_examples$ cat numbers2.txt 2 1 10 200 20 100 300 3 30 john@john-desktop:~/test_examples$ sort numbers2.txt 1 10 100 2 20 200 3 30 300
为了解决这个问题,我们可以执行-n
参数。这指定我们要对数字进行数字排序:
john@john-desktop:~/test_examples$ cat numbers2.txt 2 1 10 200 20 100 300 3 30 john@john-desktop:~/test_examples$ sort -n numbers2.txt 1 2 3 10 20 30 100 200 300
Linux如何按字母排序文件
默认情况下,sort将按字母顺序对文件进行排序:
john@john-desktop:~/test_examples$ cat text1.txt beautiful decoration colour a john@john-desktop:~/test_examples$ sort text1.txt a beautiful colour decoration
检查文件是否已排序
通过将-c
参数传递给sort命令,我们可以快速判断文件是否正确。
john@john-desktop:~/test_examples$ cat sorted.txt Ape Bird Cat Dog Elephant Fox Horse john@john-desktop:~/test_examples$ cat unsorted.txt Horse Elephant Dog Ape Cat Bird Fox john@john-desktop:~/test_examples$ sort -c unsorted.txt sort: unsorted.txt:2: disorder: Elephant john@john-desktop:~/test_examples$ sort -c sorted.txt john@john-desktop:~/test_examples$
在上面的示例中,我们可以看到单词disorder
。这表明它未按顺序排序。
同时排序多个文件的内容
john@john-desktop:~/test_examples$ cat file1.txt America Canada Japan England Wales Germany Scotland Ireland john@john-desktop:~/test_examples$ cat file2.txt Spain France Holland Russia Turkey Australia john@john-desktop:~/test_examples$ sort file1.txt file2.txt America Australia Canada England France Germany Holland Ireland Japan Russia Scotland Spain Turkey Wales
排序具有多个字段的文件
到目前为止,我们已经看到了一些简单的示例,这些示例针对的是每行包含一个单词或一个数字的文件。
在大多数情况下,文件将在同一行上包含多个条目。sort命令可以轻松地对字段进行排序。
让我们看一些示例:
对文件的基本排序
john@john-desktop:~/test_examples$ cat multifile1.txt John,21 Jessie,8 Fred,2 Maria,34 Paul,19 john@john-desktop:~/test_examples$ sort multifile1.txt Fred,2 Jessie,8 John,21 Maria,34 Paul,19
正如我们在上面的示例中看到的,此处的标准排序已按第一个字段对输出进行了排序。
按字段排序
在下一个示例中,我们将指定一个定界符作为排序依据。在我们的示例文件中,字段用,
分隔。定界符的参数是-t。参数-k用于指定key。语法为-kx,y
,其中x
为起始位置,y
为结束键。默认情况下,如果未指定y
,则将其设置为行尾
。
john@john-desktop:~/test_examples$ cat multifile1.txt John,21 Jessie,8 Fred,2 Maria,34 Paul,19 john@john-desktop:~/test_examples$ sort multifile1.txt Fred,2 Jessie,8 John,21 Maria,34 Paul,19 john@john-desktop:~/test_examples$ sort -t"," -k2n,2 multifile1.txt Fred,2 Jessie,8 Paul,19 John,21 Maria,34
以相反的数字顺序对第二个字段中的文件进行排序:
john@john-desktop:~/test_examples$ sort -t"," -k2nr,2 multifile1.txt Maria,34 John,21 Paul,19 Jessie,8 Fred,2
将在第一个字段上按字母顺序排序,然后在第二个字段上按数字顺序排序:
john@john-desktop:~/test_examples$ cat multifile2.txt file1,1 file1,9 file2,1 file2,8 file2,4 file1,3 file1,2 file2,3 john@john-desktop:~/test_examples$ sort -t"," -k1,1 -k2n,2 multifile2.txt file1,1 file1,2 file1,3 file1,9 file2,1 file2,3 file2,4 file2,8
john@john-desktop:~/test_examples$ cat multifile6.txt 192.168.0.1 127.0.0.10 127.0.0.1 127.0.0.2 192.168.0.100 192.168.0.2 john@john-desktop:~/test_examples$ sort -t"." -k2,2n -k4,4n multifile6.txt 127.0.0.1 127.0.0.2 127.0.0.10 192.168.0.1 192.168.0.2 192.168.0.100
使用sort删除重复的条目
要删除重复的条目,我们可以指定参数-u:
john@john-desktop:~/test_examples$ sort multifile4.txt AIX AIX AS400 Linux Linux Puppy Solaris Solaris VMS Windows Windows Zos Zos john@john-desktop:~/test_examples$ sort -u multifile4.txt AIX AS400 Linux Puppy Solaris VMS Windows Zos