shell编程——基本文本处理(三)之使用sort命令对文本进行排序

1    sort命令的基本用法

sort命令有三种执行模式,分别为排序文本、检查文件是否已经排序以及合并文件

sort [option]...[file]...

file参数是要排序的文件列表,多个文件名之间用空格隔开。

如果不使用任何关键字(sort demo.txt),则sort会将整个文本行作为关键字进行排序,其排序规律是首先比较第一列,如果值相同则比较第二列,以此类推。

2    使用单个关键字排序

在某些情况下,用户可能不需要所有的列都参与排序,只需要根据其中的几个列进行比较,这种情况下可以使用-k选项来定义排序关键字,其基本语法如下:

-k pos1[,pos2]

pos1表示排序关键字的起始位置,pos2表示排序关键字的结束位置,这两者之间用逗号隔开。

sort -k 2,3 demo.txt  //使用两个列作为一个关键字来进行排序,程序首先会根据第2列进行排序,在第2列形同的情况下,再根据第3列排序。

sort命令中一个文本行只能包括10列

-k pos

表示从pos参数指定的列开始,一直到文本的结束都是排序关键字。sort在排序的时候会从pos指定的列开始,一直比较到行尾。

将列中的一个小子串作为排序关键字的组成部分:

-k pos1[.start][,pos2.[end]]

从pos1列的第start个字符开始,一直到第pos2列的第end个字符结束,都是排序关键字的组成部分。

列号和字符位置编号都从1开始,如果省略了start,则表示从第1个字符开始,如果省略了end,则表示到最后一个字符结束。

根据某个指定的列排序:

-k pos,pos

-k pos[.start],pos[.end]

3    根据关键字降序排列

-r选项是作为全局选项使用,其作用对象为sort命令中所有没有附件修饰符的列

修饰符r可以附加在组成关键字的列号后面,其作用域为所附加的列

sort -r -k 2,3 demo.txt等价于

sort -k 2,3r demo.txt等价于sort -k 2r,3r demo.txt等价于sort -k 2r,3 demo.txt

4    数值列的排序

在默认情况下,sort命令会将所有的列看做字符串,并且按照字符串的排序规则进行排序。为了使sort命令能够正确地处理数值字段,用户需要使用-n选项或者修饰符n。

sort -n -k 3,3 demo.txt等价

sort -k 3,3n demo.txt

修饰符可以多个使用:sort -k 3,3nr demo.txt

如果对非数值列使用-n选项或者修饰符,会导致不可预料的后果

5    自定义分隔符

在默认情况下,sort命令会将连续的空格或制表符作为列的分隔符,但是在实践中,可能会存在这其他分隔符,如冒号、逗号或者分号。

sort命令提供了一个-t选项,可以使得用户自己来指定自己需要的列分隔符

sort -t : -k 3n,3 /etc/password

6    删除重复的行

-u选项可以去掉重复的行

sort -u demo.txt

7    根据多个关键字排序

用户可以在sort命令中同时指定多个关键字,sort命令会根据各个关键字依次来排序

sort -k 3,3nr -k 4,4n demo.txt

定义的两个关键字都使用了修饰符,这些修饰符仅仅作用于所附加的关键字本身,并不影响其他的关键字。

sort -t : -n -k 5b,5 -k 3,3 /etc/passwrd

由于第一个关键字已经有了一个修饰符b,所以sort命令会认为第1个关键字不再需要修饰符,只将-n选项作用于第2个关键字-k 3,3

稳定排序:在待排序的记录序列中,存在多个具有相同的关键字的记录,若经过排序,这些记录的相对次序保持不变

8    使用sort命令合并文件夹

使用sort命令可以很方便地合并多个文件,同时将文本文件的内容进行排序:

sort file1 file2

利用-u去掉重复的行

如果用户只想将两个文件合并,不想执行排序处理,可以使用sort -m 选项

你可能感兴趣的:(shell编程——基本文本处理(三)之使用sort命令对文本进行排序)