Shell编程--wc、cut、sort、uniq

发布时间:2024年01月16日

1.wc

wc命令用于计算字数。
利用wc指令我们可以计算文件的Byte数、字数、或是列数,若不指定文件名称、或是所给予的文件名为"-",则wc指令会从标准输入设备读取数据。

1.1 语法

wc [-clw][--help][--version][文件...]

参数

  • -c或–bytes或–chars:只显示Bytes数
  • -l或–lines:显示行数
  • -w或–words:只显示字数
  • –help:在线帮助
  • –version:显示版本信息

1.2 实例

在默认的情况下,wc将计算指定文件的行数、字数,以及字节数。使用的命令为:wc testfile
先查看testfile文件的内容,可以看到:

# cat testfile  
Linux networks are becoming more and more common, but scurity is often an overlooked  
issue. Unfortunately, in today’s environment all networks are potential hacker targets,  
fro0m tp-secret military research networks to small home LANs.  
Linux Network Securty focuses on securing Linux in a networked environment, where the  
security of the entire network needs to be considered rather than just isolated machines.  
It uses a mix of theory and practicl techniques to teach administrators how to install and  
use security applications, as well as how the applcations work and why they are necesary. 

使用 wc统计,结果如下:

# wc testfile           //testfile文件的统计信息  
3 92 598 testfile       //testfile文件的行数为3、单词数92、字节数598 

其中,3 个数字分别表示testfile文件的行数、单词数,以及该文件的字节数。
如果想同时统计多个文件的信息,例如同时统计testfile、testfile_1、testfile_2,可使用如下命令:

# wc testfile testfile_1 testfile_2   //统计三个文件的信息 

输出结果如下:

# wc testfile testfile_1 testfile_2   //统计三个文件的信息  
3 92 598 testfile                    //第一个文件行数为3、单词数92、字节数598  
9 18 78 testfile_1                   //第二个文件的行数为9、单词数18、字节数78  
3 6 32 testfile_2                    //第三个文件的行数为3、单词数6、字节数32  
15 116 708 总用量                    //三个文件总共的行数为15、单词数116、字节数708 

2.cut

cut命令用于显示每行从开头算起 num1 到 num2 的文字。

2.1 语法

cut [-bn] [file]
cut [-c] [file]
cut [-df] [file]

2.2 使用说明

  • cut 命令从文件的每一行剪切字节、字符和字段并将这些字节、字符和字段写至标准输出。
  • 如果不指定 File 参数,cut 命令将读取标准输入。必须指定 -b、-c 或 -f 标志之一。

参数:

  • -b:以字节为单位进行分割。这些字节位置将忽略多字节字符边界,除非也指定了 -n 标志
  • -c:以字符为单位进行分割
  • -d:自定义分隔符,默认为制表符
  • -f:与-d一起使用,指定显示哪个区域
  • -n:取消分割多字节字符。仅和 -b 标志一起使用。如果字符的最后一个字节落在由 -b 标志的 List 参数指示的范围之内,该字符将被写出;否则,该字符将被排除

2.3 实例

当你执行who命令时,会输出类似如下的内容:

# who
rocrocket :0           2009-01-08 11:07
rocrocket pts/0        2009-01-08 11:23 (:0.0)
rocrocket pts/1        2009-01-08 14:15 (:0.0)

如果我们想提取每一行的第3个字节,就这样:

# who|cut -b 3
c
c

3.sort

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

3.1 语法

sort [-bcdfimMnr][-o<输出文件>][-t<分隔字符>][+<起始栏位>-<结束栏位>][--help][--verison][文件][-k field1[,field2]]

参数说明

  • -b 忽略每行前面开始出的空格字符。
  • -c 检查文件是否已经按照顺序排序。
  • -d 排序时,处理英文字母、数字及空格字符外,忽略其他的字符。
  • -f 排序时,将小写字母视为大写字母。
  • -i 排序时,除了040至176之间的ASCII字符外,忽略其他的字符。
  • -m 将几个排序好的文件进行合并。
  • -M 将前面3个字母依照月份的缩写进行排序。
  • -n 依照数值的大小排序。
  • -u 意味着是唯一的(unique),输出的结果是去完重了的。
  • -o<输出文件> 将排序后的结果存入指定的文件。
  • -r 以相反的顺序来排序。
  • -t<分隔字符> 指定排序时所用的栏位分隔字符。
  • +<起始栏位>-<结束栏位> 以指定的栏位来排序,范围由起始栏位到结束栏位的前一栏位。
  • –help 显示帮助。
  • –version 显示版本信息。
  • [-k field1[,field2]] 按指定的列进行排序。

3.2 实例

在使用 sort 命令以默认的式对文件的行进行排序,使用的命令如下:sort testfile
sort 命令将以默认的方式将文本文件的第一列以 ASCII 码的次序排列,并将结果输出到标准输出。
使用 cat 命令显示 testfile 文件可知其原有的排序如下:

# cat testfile      //testfile文件原有排序  
test 30  
Hello 95  
Linux 85 

//使用 sort 命令重排后的结果如下:
# sort testfile
Hello 95  
Linux 85  
test 30 

使用 -k 参数设置对第二列的值进行重排,结果如下:

# sort testfile -k 2
test 30  
Linux 85 
Hello 95  

4.uniq

  • uniq 命令用于检查及删除文本文件中重复出现的行列,一般与 sort 命令结合使用。
  • uniq 可检查文本文件中重复出现的行列。

4.1 语法

uniq [-cdu][-f<栏位>][-s<字符位置>][-w<字符位置>][--help][--version][输入文件][输出文件]

参数

  • -c或–count 在每列旁边显示该行重复出现的次数。
  • -d或–repeated 仅显示重复出现的行列。
  • -f<栏位>或–skip-fields=<栏位> 忽略比较指定的栏位。
  • -s<字符位置>或–skip-chars=<字符位置> 忽略比较指定的字符。
  • -u或–unique 仅显示出一次的行列。
  • -w<字符位置>或–check-chars=<字符位置> 指定要比较的字符。
  • –help 显示帮助。
  • –version 显示版本信息。
  • [输入文件] 指定已排序好的文本文件。如果不指定此项,则从标准读取数据;
  • [输出文件] 指定输出的文件。如果不指定此选项,则将内容显示到标准输出设备(显示终端)。

4.2 实例

文件testfile中第 2、3、5、6、7、9行为相同的行,使用 uniq 命令删除重复的行,可使用以下命令:uniq testfile

//testfile中的原有内容为:
# cat testfile
test 30  
test 30  
test 30  
Hello 95  
Hello 95  
Hello 95  
Hello 95  
Linux 85  
Linux 85 

//使用uniq 命令删除重复的行后,有如下输出结果:
# uniq testfile
test 30  
Hello 95  
Linux 85 

检查文件并删除文件中重复出现的行,并在行首显示该行重复出现的次数。使用如下命令:uniq -c testfile
结果输出如下:

# uniq -c testfile    //删除重复行后的内容  
3 test 30             //前面的数字的意义为该行共出现了3次  
4 Hello 95            //前面的数字的意义为该行共出现了4次  
2 Linux 85            //前面的数字的意义为该行共出现了2次 

当重复的行并不相邻时,uniq 命令是不起作用的,即若文件内容为以下时,uniq 命令不起作用:

# cat testfile1      //原有内容 
test 30  
Hello 95  
Linux 85 
test 30  
Hello 95  
Linux 85 
test 30  
Hello 95  
Linux 85 

//这时我们就可以使用 sort:
# sort  testfile1 | uniq
Hello 95  
Linux 85 
test 30

//统计各行在文件中出现的次数:
# sort testfile1 | uniq -c
   3 Hello 95  
   3 Linux 85 
   3 test 30

//在文件中找出重复的行:
# sort testfile1 | uniq -d
Hello 95  
Linux 85 
test 30  
文章来源:https://blog.csdn.net/m0_62396418/article/details/135617095
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。