首页 » 信息技术 »

sort命令

2019年8月20日 / 8次阅读
Shell

Linux的sort命令,是专门用来干排序这件事情的,它以行为单位,将输入的本文按照参数确定的方式排序,然后重新显示出来。

sort命令在默认情况下,是按照ASCII编码的顺序,从小到大进行排序(升序)。如果第1个字符与别的行相同,就继续比较第2个字符。

xinlin@ubuntu:~/test$ cat > forsort.txt
bacde
afgty
abdec
k82
e42
2wdfk
n254c
xinlin@ubuntu:~/test$ sort forsort.txt
2wdfk
abdec
afgty
bacde
e42
k82
n254c

sort命令默认的输出是升序排列,使用 -r 参数,可以修改为降序排列。

xinlin@ubuntu:~/test$ sort -r forsort.txt
n254c
k82
e42
bacde
afgty
abdec
2wdfk

待排序的文本中,如果有重复的行,使用 -u 参数,可以去重。

xinlin@ubuntu:~/test$ cat > sorttest.txt
1
1
2
2
3
3
xinlin@ubuntu:~/test$ sort -r sorttest.txt
3
3
2
2
1
1
xinlin@ubuntu:~/test$ sort -r -u sorttest.txt
3
2
1

一般我们在Linux系统中,都会使用重定向,将一个命令的输出存入某个文件。但如果你想将sort命令的输出存回原来的那个文件,使用重定向就不行了,会导致原文件被清空。这时要使用 -o 参数,-o 指定一个输入的文件。

xinlin@ubuntu:~/test$ sort -r -u sorttest.txt -o sorttest.txt
xinlin@ubuntu:~/test$ cat sorttest.txt
3
2
1

sort默认是按ASCII顺序进行字符串的升序排序,这样会导致10的排序在2的前面(默认把10和2当成字符串),我们可以使用 -n 参数,让sort将10和2当成数字来进行排序。

xinlin@ubuntu:~/test$ cat > fs.txt
2
10
234
8890876
12345
xinlin@ubuntu:~/test$ sort fs.txt
10
12345
2
234
8890876
xinlin@ubuntu:~/test$ sort -n fs.txt
2
10
234
12345
8890876

sort命令的 -n 参数,还可以支持小数。

xinlin@ubuntu:~/test$ cat > fsf.txt
12.3456
54.1234
1.1
10.1
100.1
xinlin@ubuntu:~/test$ sort fsf.txt
100.1
10.1
1.1
12.3456
54.1234
xinlin@ubuntu:~/test$ sort -n fsf.txt
1.1
10.1
12.3456
54.1234
100.1

sort命令是以行为单位,很多时候,每一行都多个空格分割成许多列,我们可以通过 -k 参数,来指定sort按照某一列来进行排序。sort支持的默认分隔符是空格。

xinlin@ubuntu:~/test$ cat tnum.txt
a 100 90
b 200 10
c 123 123
d 234 9
e 21  21
xinlin@ubuntu:~/test$ sort -k2 -n tnum.txt
e 21  21
a 100 90
c 123 123
b 200 10
d 234 9
xinlin@ubuntu:~/test$ sort -k3 -n tnum.txt
d 234 9
b 200 10
e 21  21
a 100 90
c 123 123

sort命令默认的列分隔符是空格,但不是所有的输出,列分割符都是空格。我们可以使用 -t 参数,来指定不同的列分隔符。

xinlin@ubuntu:~/test$ cat te.txt
e:123:jkl
g:321:asdf
f:80:wer
q:32:qwer
xinlin@ubuntu:~/test$ sort -t: -k2 -n te.txt
q:32:qwer
f:80:wer
e:123:jkl
g:321:asdf
xinlin@ubuntu:~/test$ sort -t: -k3 -r te.txt
f:80:wer
q:32:qwer
e:123:jkl
g:321:asdf

sort命令的其它一些常用参数:

-f会将小写字母都转换为大写字母来进行比较,亦即忽略大小写

-c会检查文件是否已排好序,如果乱序,则输出第一个乱序的行的相关信息,最后返回1

-C会检查文件是否已排好序,如果乱序,不输出内容,仅返回1

-M会以月份来排序,比如JAN小于FEB等等

-b会忽略每一行前面的所有空白部分,从第一个可见字符开始比较。

sort命令的高级用法

-k2r,对第2列进行降序排列

-k2rn,对第2列按照数字进行降序排列

sort默认的列分隔符是空格,在明确指定分隔符的情况下,还可以实现更复杂的排序。(不明白为什么默认的空格还要明确指定,但是现实就是这样的)

实现对第3列第2个字符的排列,一个默认的升序,一个降序:

xinlin@ubuntu:~/test$ sort -t' ' -k3.2 tes.txt
a 3 wer
b 5 uio
e 5 ass
e 5 qwe
xinlin@ubuntu:~/test$ sort -t' ' -k3.2r tes.txt
e 5 qwe
e 5 ass
b 5 uio
a 3 wer

我尝试了很多遍,如果不明确说明空格是分隔符的话,会上两条命令的执行会失败。

sort命令还有可以实现一些更复杂的排序,比如多个-k参数的何用,但是我始终测试不能成功。

本文链接:https://www.maixj.net/ict/sort-22638

相关文章

留言区


前一篇:
后一篇:

栏目精选

云上小悟,麦新杰的独立博客

Ctrl+D 收藏本页

栏目


©Copyright 麦新杰 Since 2014 云上小悟独立博客版权所有 备案号:苏ICP备14045477号-1。云上小悟网站部分内容来源于网络,转载目的是为了整合信息,收藏学习,服务大家,有些转载内容也难以判断是否有侵权问题,如果侵犯了您的权益,请及时联系站长,我会立即删除。

网站二维码
go to top