Linux下统计文档中每个字符出现的次数

给定一个中文文档,我们想统计其中每个字出现的次数该怎么做呢?如果是英文文档,这个问题有比较固定的思路:用tr命令或者awk命令按照每行的空格将单词切分到多行,然后sort命令排序所有的行,最后uniq命令统计重复行的次数即可获得每个单词出现的次数。但是换成中文文档之后,tr或者awk命令就无法再根据空格将一行汉字切分到多行,需要我们更换其他命令。
一种可行的方法是借用cut命令。cut命令可以按照字节,字符和字段来显示指定位置。我们可以先利用wc –m命令获得当前行的长度,然后利用cut –c依次切割出每个汉字,这样就可以获得一个每行为单个汉字的文档。之后我们就可以利用sort和uniq命令统计每个汉字出现的次数了。脚本如下:

#!/bin/sh

for line in `cat $1`; do
    count=`echo $line|wc -m`
    echo $count $line

    i=1;
    while [ "$i" -lt "$count" ]; do
        one_word=`echo $line|cut -c$i`
        #echo $i $one_word
        echo "$one_word" >>temp
        ((i++))
    done
done

sort temp|uniq -c|sort -k1nr > $2

rm -f temp

上面的脚本需要两个参数,第一个参数是要统计的文件,第二个参数是输出统计结果的文件。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值