在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
文本:
实验结果: