使用unix shell计算多个文件中字符的出现次数

时间:2012-03-31 15:14:29

标签: shell unix

我想帮助我的女朋友 - 她需要大约200个文件(每个文件)中某些字符的具体数量。

我已找到How can I use the UNIX shell to count the number of times a letter appears in a text file?,但这只显示完整的数字,而不是每个文件的出现次数。基本上,我想要的是以下内容:

$ ls 
test1   test2
$ cat test1
ddddnnnn
ddnnddnnnn
$ cat test2
ddnnddnnnn
$ grep -o 'n' * | wc -w
16
$ <insert command here>
test1 10
test2 6
$
关于输出的

或类似的东西。由于这将在她的大学机器上,我无法在perl中编写任何代码,只允许shell。我的shell知识有点生疏,所以我无法想出更好的解决方案 - 也许你可以提供帮助。

3 个答案:

答案 0 :(得分:2)

grep -Ho n * | uniq -c

产生

 10 test1:n
  6 test2:n

如果您想要完全输出:

grep -Ho n * | uniq -c | while read count file; do echo "${file%:n} $count"; done

答案 1 :(得分:0)

这不是很优雅,但最明显的解决方案是:

letter='n'
for file in *; do
    count=`grep -o $letter "$file" | wc -w`
    echo "$file contains $letter $count times"
done

答案 2 :(得分:0)

对于支持它的UNIX版本,Glen的答案要好得多。这将适用于声称符合POSIX标准的UNIX。这适用于其他答案不会飞的穷人。 POSIX grep没有提及grep -H -o请参阅:http://pubs.opengroup.org/onlinepubs/009604499/utilities/grep.html

获取您想要的文件列表list.txt。我无缘无故地选择了字符^ == shift 6

while read fname
do
  cnt=`tr -dc '^' < $fname | wc -c`
  echo "$fname: $cnt"
done < list.txt