计算文件中给定字符的编号

时间:2016-01-02 05:30:03

标签: bash unix

我需要计算 - 在bash中 - 文件中给定(单字节)字符的数量。例如:计算逗号数,或点数或大写字母' C'或......任何其他角色。

基本上我需要wc -l通用版本来计算某个文件中包含的任何单字节字符(不仅仅是新行)。

我必须将它用于非常大的文件(几GB),因此它必须快速且资源有效。理想情况下,如果必须计算新行,则wc -l的表现水平相同。

2 个答案:

答案 0 :(得分:4)

您可以将grep -owc -l一起使用。例如计算输入文件中的字母C的数量:

grep -o 'C' file | wc -l

要在单一命令中完成此操作,您可以将awk与自定义RS一起使用:

awk -v RS='C' 'END{print NR-1}' file

答案 1 :(得分:2)

在此处发布一些测试结果以供记录...... 我确实计算了包含1,807,076,940字节和100ML行的文件中的点数。每行只包含一个点:

$ time wc -l xnorm.dat # takes 1.047 seconds(this count new-lines)
$ time grep -o '\.' xnorm.dat | wc -l # takes 87.443 seconds
$ time awk -v RS='.' 'END{print NR-1}' xnorm.dat # takes 53.947 seconds
$ time tr -d -C '\.' < xnorm.dat | wc -c # takes 3.732 seconds

修改

根据4ae1e1建议在C中写了一个小程序(fcc =快速字符计数器):

$ time fcc -i xnorm.dat -c \. # takes 1.327 seconds