Linux通过shell和c语言分别实现统计文本词频率并排序

Linux通过shell和c语言分别实现统计文本词频率并排序

在linux下实现一些脚本程序,bash和c语言各有优缺点,本文通过实现两种版本的代码,分析两者的差异性。

shell实现

#统计文字

content=$(cat words) #把word.txt读取到content字符串中
declare -A myMap #声明Map,key值为word,value为该word的出现次数
for word in $content;do #循环读入到word
        flag=0 #标志位,0代表map中没有该word,1则相反
        for key in ${!myMap[*]};do
                if [ $key == $word ] #有该word
                then
                        flag=1
                        myMap[$word]=`expr ${myMap[$word]} + 1` #map的value+1,相当
于c语言的i++
                fi
        done
        if [ $flag -eq 0 ] #没有该word
        then
                myMap[$word]=1 #把这个word加入map,value初始化为1
        fi
done
echo 对词频统计结果:
for key in ${!myMap[*]};do
        echo $key ${myMap[$key]}
done


#对词频排序输出
echo 排序后词频统计结果:
declare -A Map #声明Map,key值为word。value范围为0,1。0代表未排序,1代表已经排序
for key in ${!myMap[*]};do
        Map[$key]=0 #value初始化为0
done
#输出myMap中value最大项,并设置map的value为1
for i in ${!myMap[*]};do
        value=0
        key=
        for j in ${!myMap[*]};do
                if [ ${myMap[$j]} -gt $value ]
                then
                        key=$j
                        value=`expr ${myMap[$j]}`
                fi
        done
        echo $key ${myMap[$key]}
        unset myMap[$key] #删除已排序key-value对
done     
      

文本:
在这里插入图片描述
实验结果:
在这里插入图片描述

c语言实现

差异性比较

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值