Linux下统计文档中每个字符出现的次数
Posted yutianzuijin
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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
上面的脚本需要两个参数,第一个参数是要统计的文件,第二个参数是输出统计结果的文件。
以上是关于Linux下统计文档中每个字符出现的次数的主要内容,如果未能解决你的问题,请参考以下文章
JavaScript学习(七十七)—统计字符串中出现次数最多的字符和每个字符出现的次数