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

博客 分享
0 197
张三
张三 2022-06-14 12:00:31
悬赏:0 积分 收藏

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

目录
  • 1、排序命令sort
    • (1)sort命令介绍
    • (2)练习
  • 2、取消重复行命令uniq
  • 3、统计命令wc

1、排序命令sort

(1)sort命令介绍

sort命令可针对文本文件的内容,以行为单位来排序。

命令格式如下:

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

选项:

  • -f:忽略大小写。
  • -b:忽略每行前面的空白部分。
  • -n:以数值型进行排序,sort命令默认使用字符串型排序。
  • -r:反向排序。
  • -u:删除重复行。就是uniq命令。
  • -t:指定分隔符,sort命令默认的分隔符是制表符。
  • -k [n,m]:按照指定的字段范围排序。从第n字段开始,m字段结束(默认到行尾)。

(2)练习

以下练习默认文本内容如下:

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

1)示例1

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

执行sort排序命令:

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

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

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

2)示例2

按照文档中,每行的指定字段进行排序。

需要使用-k选项:

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

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

3)示例3

按照数字进行排序,根据文本中的内容,我们需要按照第三列进行排序。

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

我们发现按照第三列内容进行排序的结果,有点不正确,3和6怎么排在12的后边了。

是因为sort命令并没有把第三列的数据当作数字,默认是识别成字符串,所以是按照字符串的规则来排序的,也就是按第一位的数字进行排序的。

我们需要添加sort命令的-n选项,就可以解决上述问题了。也就是让sort命令把第三列按数值进行排序。

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

4)示例4

如果想要指定排序的字段,并且文本中字段间的分隔符不是制表符,这个时候就需要使用-t选项指定分隔符,并使用-k选项指定字段号。

如下面文本:

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

需求:按文本内容中的第三列数字进行排序。

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

2、取消重复行命令uniq

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

命令格式如下:

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

练习:

student.txt文本内容如下:

ID      Name    Python  Linux   MySQL   Java1       Tangs   88      87      86      85.552       Sunwk   99      98      97      96.662       Sunwk   99      98      97      96.663       Zhubj   77      76      75      74.443       Zhubj   77      76      75      74.444       Shahs   66      65      64      63.334       Shahs   66      65      64      63.33

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

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

[root@localhost tmp]# uniq student.txtID      Name    Python  Linux   MySQL   Java1       Tangs   88      87      86      85.552       Sunwk   99      98      97      96.663       Zhubj   77      76      75      74.444       Shahs   66      65      64      63.33

更多参考可以查看:https://www.runoob.com/linux/linux-comm-uniq.html

3、统计命令wc

wc命令是统计文档中行数,字符数,字节数等信息。

命令格式如下:

[root@localhost ~]# wc [选项] 文件名选项:    -l:只统计行数    -w:只统计单词数    -m:只统计字符数

练习1:

在默认的情况下,wc命令将计算指定文件的行数、字数,以及字节数。

# 行数为5、单词数30、字节数124[root@localhost tmp]# wc student.txt  5  30 124 student.txt

练习2:

查看特定的统计信息,只看行数和字节数。

# 行数为5、字节数124[root@localhost tmp]# wc -lm student.txt  5 124 student.txt

练习3:

同时查看多个文件的统计信息。

[root@localhost tmp]# wc student.txt test2.txt  5  30 124 student.txt  8  37 318 test2.txt 13  67 442 总用量

更多参看可以查看:https://www.runoob.com/linux/linux-comm-wc.html

posted @ 2022-06-14 11:01 繁华似锦Fighting 阅读(6) 评论(0) 编辑 收藏 举报
回帖
    张三

    张三 (王者 段位)

    821 积分 (2)粉丝 (41)源码

     

    温馨提示

    亦奇源码

    最新会员