c++清空一个txt文本_对华为 ICT 学院中统计文本文件中每个词例子进行改进

9c90d58a83a5af791bf46c9505a9f60c.png

今天华为 ICT 学院 Big Data HCIA 集训班演示 MapReduce 的时候用了一个统计文本文件中每个词出现命令的命令行例子,针对这行命令,我针对一些边界情况进行了改进。

讲师的例子:

cat test.txt | tr ' ' 'n' | sort | uniq -c | awk '{print $2"t"$1}' | sort -k2 -nr | less

命令拆解:

cat test.txt | #输出文本文件内容
    tr ' ' 'n' | #将所有空格改为换行符
    sort | #按单词首字母顺序排序
    uniq -c | #放一起并计数
    awk '{print $2"t"$1}' | #依次对每一行进行处理(此处为把单词移动到第一列,计的数字放第二列),然后输出
    sort -k2 -nr | #按照第二列倒序排列
    less #非一次性输出,可用方向键流式输出

我的改进:

cat test.txt |  tr 'A-Z' 'a-z' | tr '!?"“”‘’:;/[/]//{}(),.tn' ' ' | tr "'" " " | tr ' ' 'n' | sort | uniq -c | awk '{print $2"t"$1}' | sort -k2 -nr | less

命令拆解:

cat test.txt |  
    tr 'A-Z' 'a-z' | #大写字母换成小写字母  ,因为 The  和 the  是一个单词
    tr '!?"“”‘’:;/[/]//{}(),.tn' ' ' | #文本中的常见标点符号替换成空格
    tr "'" " " | #去掉单引号
    tr ' ' 'n' | 
    sort | 
    uniq -c | 
    awk '{print $2"t"$1}' |
    sort -k2 -nr | 
    less

如果不想对各种情况分别进行处理,可以选择直接去除掉文件中的各种字符 tr -dc "[a-z][A-Z]n",然而这种直接粗暴消掉文件中所有标点和符号的方式,会导致如 URL 这张种边际情况,本来应该是按照'/'或'.'分词,但现在是直接一个网址被解析成了一个长字符串如“wwwbaiducom“ Copyright ©https://zhuanlan.zhihu.com/ysimonguo-research. All Rights Reserved

后续提升空间:

  • 将多个空格变成一个并将空行去掉 如 tr -s "[ n]"
  • 如果还存在其它特殊符号,比如` 或 ~,那么需要在第一步中一起让空格替换掉它们
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值