通过sort,uniq,sed实现单词统计并取出单词个数最多的前10个单词例子

注意:最后一条命令即可完成例子中所描述的问题,分开的每一步是为了让读者清晰地理解。

一、数据准备

首先准备单词统计文本:我们选择的是/etc/passwd文件做测试,为了避免误操作,我们将/etc/paswd下内容先进行备份。

cat /etc/passwd > ./test.txt

应用cat命令查看文本内容:

可以看到文件内容格式复杂,冒号,斜杠,横杠,空格 等分割符为单词统计造成一定难度,因此我们需要针对性的对单词进行分割。

二、数据清洗

本文通过sed命令对文本内容进行清洗。

# sed -e 是允许sed连续执行多条命令
# 's/[-|/| ]/:/g' 是将横杠,斜杠,空格的正则匹配符号全部替换成冒号
# 's/:\{1,\}/\n/g' 是将一个冒号或者多个冒号全部统一替换成换行符
cat test.txt | sed -e 's/[-|/| ]/:/g' -e 's/:\{1,\}/\n/g'

 此时数据变为:

三、单词统计并计算最高数目排行榜

1、首先第一步对分割后的单词进行排序,将相同单词放到一起

# sort 作用是将文本内容按照相同单词放到一起
cat test.txt | sed -e 's/[-|/| ]/:/g' -e 's/:\{1,\}/\n/g' | sort 

 可得到效果图:

 

 2、之后对排序后的单词进行统计

通过uniq命令进行单词统计

# uniq 作用是去重 -c 是将连续在一起的单词进行计数统计
# (需要注意的是uniq应该和sort一起使用,如果单词没有连续,那么统计就会出错)
cat test.txt | sed -e 's/[-|/| ]/:/g' -e 's/:\{1,\}/\n/g' | sort | uniq -c

 效果图:

3、对单词出现次数进行排序并确定出现最多次数的10个单词

通过sort命令head命令进行获取top操作

# sort -n 是按照数字进行排序 -r 是倒序排列 -t " " 按照空格进行分割 -k 1 去分割后的第一个元素
# sort这句主要意思是将一行数据以空格分割取第一个元素,并对第一个元素以数字大小进行倒序排序
# head 是取前10个数据 -n 10也是取前十个,如果取前20就将数字更换
cat test.txt | sed -e 's/[-|/| ]/:/g' -e 's/:\{1,\}/\n/g' | sort | uniq -c | sort -n -r -t " " -k 1 | head -n 10

效果图:

四、最终命令及效果图

cat test.txt | sed -e 's/[-|/| ]/:/g' -e 's/:\{1,\}/\n/g' | sort | uniq -c | sort -n -r -t " " -k 1 | head -n 10  | awk 'BEGIN {max=0;result="";print "   数量 单词"} {if($1>max) {max=$1;result=$2};print $0} END{print "出现次数最多的单词是["result"]"}'

最终效果图:

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值