『忘了再学』Shell基础 — 31、字符处理相关命令

目录

1、sort 命令排序(1)sort 命令介绍

sort 命令可以按行对文本文件的内容进行排序。

命令格式如下:

[root@localhost ~]# sort [选项] 文件名

选项:

(2)练习

以下练习的默认文本如下:

java    haha    3
python  lala    77
shell   dudu    23
hello   world   12
linxu   xixi    6

1)示例 1

sort 命令默认使用每行开头的第一个字符进行排序。

执行排序顺序:

# 默认按行首字符进行排序
[root@localhost tmp]# sort test.txt
hello   world   12
java    haha    3
linxu   xixi    6
python  lala    77
shell   dudu    23

如果要反向排序,请使用 -r 选项:

# 反向排序
[root@localhost tmp]# sort -r test.txt
shell   dudu    23
python  lala    77
linxu   xixi    6
java    haha    3
hello   world   12

2)示例 2

按文档中每一行的指定字段排序。

需要 -k 选项:

# -k 2,2表示:指定按照第二个字段排序
# 2,2表示第2个字段开始,到第2个字段结束
[root@localhost tmp]# sort -k 2,2 test.txt
shell   dudu    23
java    haha    3
python  lala    77
hello   world   12
linxu   xixi    6

注意:文本中字段之间的分隔符是制表符,默认识别。

3)示例 3

要按数字排序,取决于文本中的内容,我们需要按第三列排序。

[root@localhost tmp]# sort -k 3,3 test.txt
hello   world   12
shell   dudu    23
java    haha    3
linxu   xixi    6
python  lala    77

我们发现按第三列内容排序的结果有点不对,怎么3和6排在12后面。

因为排序命令不把第三列的数据看成数字,所以默认识别为字符串,所以按照字符串的规则排序,即按第一个数字排序.

我们需要添加sort命令的-n选项来解决上面的问题。也就是让sort命令对第三列进行数字排序。

[root@localhost tmp]# sort -n -k 3,3 test.txt
java    haha    3
linxu   xixi    6
hello   world   12
shell   dudu    23
python  lala    77

4)示例 4

如果要指定排序字段,而文本中字段之间的分隔符不是制表符,需要使用-t选项指定分隔符,使用-k选项指定字段编号.

如以下文字:

java:haha:3
python:lala:77
shell:dudu:23
hello:world:12
linxu:xixi:6

要求:按文本内容中的第三列编号排序。

[root@localhost tmp]# sort -t ":" -n -k 3,3 test.txt
java:haha:3
linxu:xixi:6
hello:world:12
shell:dudu:23
python:lala:77

2、取消重复行命令uniq

uniq命令是用来取消重复行的命令,其实和sort -u选项是一样的。

命令格式如下:

[root@localhost ~]# uniq [选项] 文件名
选项:
    -i:忽略大小写。

运动:

.txt文本内容如下:

ID      Name    Python  Linux   MySQL   Java
1       Tangs   88      87      86      85.55
2       Sunwk   99      98      97      96.66
2       Sunwk   99      98      97      96.66
3       Zhubj   77      76      75      74.44
3       Zhubj   77      76      75      74.44
4       Shahs   66      65      64      63.33
4       Shahs   66      65      64      63.33

我们可以看到ID为2、3、4的.txt文本是重复的。

使用uniq命令删除重复行后,输出结果如下:

[root@localhost tmp]# uniq student.txt
ID      Name    Python  Linux   MySQL   Java
1       Tangs   88      87      86      85.55
2       Sunwk   99      98      97      96.66
3       Zhubj   77      76      75      74.44
4       Shahs   66      65      64      63.33

© 版权声明
THE END
喜欢就支持一下吧
点赞241 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片