L22.linux命令每日一练 -- 第三章 文件过滤及内容编辑处理命令 -- uniq和wc命令

3.13 uniq:去除重复行

3.13.1 命令详解

【命令星级】 ★★★★★

【功能说明】

​ uniq命令可以输出或忽略文件中的重复行。在工作中,我们常用的场景是使用sort命令对文件排序,然后使用uniq命令去重并计数。

【语法格式】

uniq [option] [INPUT]
uniq [选项] [文件或标准输入]

​ **说明:**在uniq命令及后面的选项和文件里,每个元素直接都至少要有一个空格。

【选项说明】

​ 表3-16针对该命令的参数选项进行了说明。

​ 表3-16 uniq命令的参数选项及说明
在这里插入图片描述

3.13.2 使用范例

3.13.2.1 基础范例

​ **范例3-50:**去重测试案例。

[root@centos7 ~]# cat >neteagle2.txt<<EOF
> 10.0.0.4
> 10.0.0.4
> 10.0.0.4
> EOF
[root@centos7 ~]# uniq neteagle2.txt 	#不接任何参数即去除重复行。
10.0.0.4
[root@centos7 ~]# uniq -c neteagle2.txt 	#参数-c显示相应行出现的次数。
      3 10.0.0.4

​ **范例3-51:**结合sort去重。

[root@centos7 ~]# cat neteagle.txt 
10.0.0.4
10.0.0.4
10.0.0.4
10.0.0.5
10.0.0.4
10.0.0.8
[root@centos7 ~]# uniq neteagle.txt 
10.0.0.4
10.0.0.5
10.0.0.4
10.0.0.8
#说明:还有2行是一样的。
[root@centos7 ~]# sort -n neteagle.txt |uniq -c
      4 10.0.0.4
      1 10.0.0.5
      1 10.0.0.8

​ 上面的测试结果表明uniq只能对相邻的重复行进行去重操作,因此应先用sort处理文件再去重。

3.13.2.2 企业面试题

​ **范例3-52:**处理以下文件内容,将域名取出,并根据域名进行计数排序处理。

​ neteagle.log文件的内容如下。

[root@centos7 ~]# cat >neteagle.log<<E0F
> http://www.etiantian.org/index.html
> http://www.etiantian.org/1.html
> http://post.etiantian.org/index.html
> http://mp3.etiantian.org/index.html
> http://www.etiantian.org/3.html
> http://post.etiantian.org/2.html
> EOF

​ 解答:

[root@centos7 ~]# cat neteagle.log
http://www.etiantian.org/index.html
http://www.etiantian.org/1.html
http://post.etiantian.org/index.html
http://mp3.etiantian.org/index.html
http://www.etiantian.org/3.html
http://post.etiantian.org/2.html
[root@centos7 ~]# awk -F "/" '{print $3}' neteagle.log 	#awk命令会在后面的相关章节重点讲解。
www.etiantian.org
www.etiantian.org
post.etiantian.org
mp3.etiantian.org
www.etiantian.org
post.etiantian.org
[root@centos7 ~]# awk -F "/" '{print $3}' neteagle.log |sort|uniq -c      1 mp3.etiantian.org
      2 post.etiantian.org
      3 www.etiantian.org
[root@centos7 ~]# awk -F "/" '{print $3}' neteagle.log |sort|uniq -c|sort -rn	#将上面的结果倒序排列。
      3 www.etiantian.org
      2 post.etiantian.org
      1 mp3.etiantian.org
[root@centos7 ~]# cut -d '/' -f3 neteagle.log |sort|uniq -c |sort -rn	#不用awk,用我们学过的cut命令。
      3 www.etiantian.org
      2 post.etiantian.org
      1 mp3.etiantian.org

​ **提示:**本题也可以用awk的数组处理,见awk命令部分的讲解。

3.14 wc:统计文件的行数、单词数或字节数

3.14.1 命令详解

【命令星级】 ★★★★★

【功能说明】

​ wc命令用于统计文件的行数、单词数或字节数。

【语法格式】

wc [option] [file]
wc [选项] [文件]

​ **说明:**在wc命令及后面的选项和文件里,每个元素直接都至少要有一个空格。

【选项说明】

​ 表3-17针对该命令的参数选项进行了说明。

​ 表3-17 wc命令的参数选项及说明

在这里插入图片描述

3.14.2 使用范例

3.14.2.1 基础范例

​ **范例3-53:**查看文件的字节数、字数、行数等。

[root@centos7 ~]# wc /etc/inittab 
 17  80 511 /etc/inittab	#不接任何参数,显示的数字是什么意思?
[root@centos7 ~]# wc -c /etc/inittab 	#字节数。
511 /etc/inittab
[root@centos7 ~]# wc -l /etc/inittab 	#行数。
17 /etc/inittab
[root@centos7 ~]# wc -m /etc/inittab 	#字符数。
511 /etc/inittab
[root@centos7 ~]# wc -w /etc/inittab 	#单词数。
80 /etc/inittab
[root@centos7 ~]# wc -L /etc/inittab 	#最长行的长度。
86 /etc/inittab

​ **范例3-54:**选项-L的使用。

​ 通过for循环打印下面这句话中字母数不大于6的单词【1】(这曾是个面试题):

​ I am neteagle teacher welcome to neteagle trainning class.

[root@centos7 ~]# for word in I am neteagle teacher welcome to neteagle trainning class.;do [ `echo $word|wc -L` -le 6 ] && echo $word;done
I
am
to
class.
#上面是将一个Shell的for循环写成一行命令。这里用到了-L参数计算单词的长度。

[root@centos7 ~]for word in I am neteagle teacher welcome to neteagl
#!/bin/bash
for word in I am neteagle teacher welcome to neteagle trainning clas
s.
        do 
                [ `echo $word|wc -L` -le 6 ] && \
                echo $word
done
[root@centos7 ~]# sh wc.sh
I
am
to
class.

3.14.2.2 生产案例

​ **范例3-55:**查看登录系统的用户数。

[root@centos7 ~]# who	#who命令能够查看有哪些用户登录系统,后面会详细讲解。
root     pts/0        2020-10-23 14:30 (10.0.0.1)
root     pts/1        2020-10-23 15:40 (10.0.0.1)
[root@centos7 ~]# who|wc -l	#有时我们需要监控有多少用户登录系统,因此可用wc命令计算一共有几个人。
2

猜你喜欢

转载自blog.csdn.net/qq_25599925/article/details/125356972