1 sort命令的参数
sort 参数(可以省略) file
具体参数如下
-b:忽略每行前面开始的空格字符,空格数量不固定时,该选项几乎是必须要使用的("-n"选项隐含该选项,测试发现都隐含)
-c:检查文件是否已经按照顺序排序,如未排序,会提示从哪一行开始乱序
-C:类似于"-c",只不过不输出任何诊断信息。可以通过退出状态码1判断出文件未排序
-d:只处理英文字母、数字及空格,忽略其他的字符
-f:将小写字母视为大写字母
-h:使用易读性数字(例如:2K、1G)
-i:除了040至176之间的ASCII字符外(八进制0-177),忽略其他的字符(忽略无法打印的字符如退格/换页键/回车)
-k:以哪个区间 (field) 来进行排序
-m:将几个排序好的文件进行合并,只是单纯合并,不做排序
-M:将前面3个字母依照月份的缩写进行排序
-n:依照数值的大小排序
-o<输出文件>:将排序后的结果存入指定的文件
-r:降序
-u:忽略相同行
-t<分隔字符>:指定分隔符,默认的分隔符为空白字符和非空白字符之间的空字符
2 sort命令常用参数使用
1) sort 我们不使用参数的情况,默认是以第一列的ASCII排序,如下。
cat t1.txt
dbc
abc
fbd
cbb
sort t1.txt
abc
cbb
dbc
fbd
2) -nr参数
我们不用ASCII排序,我们用数字大小进行排序,我们可以使用 -n 参数(默认升序),很明显这里的-n是number的意思
cat t2.txt
200
50
100
300
80
sort -n t2.txt
50
80
100
200
300
如果我们想按照数字的降序来,我们使用-r参数
sort -nr t2.txt
300
200
100
80
50
我的这篇博客里面会用到sort命令和-nr的联合使用
find . -type f -size +300M | xargs du -h | sort -nr
3) -t参数用来分割,-k参数来获取第几列
比如我们数据如下
cat a.txt
chenyu:100
chengongyu:200
chenzixuan:130
chencaifeng:150
chenzixi:40
我们发现数据中间有:号隔开, 我们可以使用 -t ":" 分割,然后我么需要按照数字排序,那么我们可以通过-k来获取第几列,
-k 2,2 这里中间用逗号隔开,表示第二列开始,第二列结束,我们现在需要按照数字排序-k 2,2n 或者-k 2,2nr
sort -t ":" -k 2,2n a.txt
chenzixi:40
chenyu:100
chenzixuan:130
chencaifeng:150
chengongyu:200
sort -t ":" -k 2,2nr a.txt
chengongyu:200
chencaifeng:150
chenzixuan:130
chenyu:100
chenzixi:40
我们尽量保持这样的习惯,第几列开始,第几列结束,-k 2,2nr 不要写成 -k 2nr
3 sort命令去掉重复数据和uniq命令进行对比
1)用-u参数或略同行
cat b.txt
123
123
234
345
345
sort -u b.txt
123
234
345
2)配合uniq命令,uniq对比的整个一行,如果数据有多列,我们需要在部分中间列去重,这里就不适用,这由于只有一列,可以
sort file | uniq
sort b.txt | uniq
123
234
345
如果数据如下,需要第二个数字200的去重,这了的uniq就不适用了
$ cat a.txt
chenyu:100
chengongyu:200
chenzixuan:130
chencaifeng:150
chenzixi:40
chenchen:200
sort -t ":" -k 2,2nr -u a.txt
chengongyu:200
chencaifeng:150
chenzixuan:130
chenyu:100
chenzixi:40
如果我们uniq加上-u和-d参数会是什么效果呢?这里的重复的行数是不连续的,比如数据123和123。
cat b.txt
123
234
345
345
123
sort b.txt | uniq -d
123
345
我们可以知道sort命令配合uniq -d命令 我们可以找到这个文件里面的重复数据。
sort b.txt | uniq -u
234
我们可以知道sort命令配合uniq -u命令 我们去掉这个文件里面的所有重复数据,不保留重复数据。
sort b.txt | uniq
123
234
345
我们可以知道sort命令配合uniq 不加参数命令,我们去掉这个文件里面的重复数据,指保留重复数据的一份。
4 总结
1)我们可以知道sort命令配合uniq -d命令 我们可以找到这个文件里面的重复数据。
2)我们可以知道sort命令配合uniq -u命令 我们去掉这个文件里面的所有重复数据,不保留重复数据。
3)我们可以知道sort命令配合uniq 不加参数命令,我们去掉这个文件里面的重复数据,指保留重复数据的一份。
4)看到排序和去重复或者找重复数据,我们需要想到sort命令和uniq命令。