我需要计算 - 在bash中 - 文件中给定(单字节)字符的数量。例如:计算逗号数,或点数或大写字母' C'或......任何其他角色。
基本上我需要wc -l
的通用版本来计算某个文件中包含的任何单字节字符(不仅仅是新行)。
我必须将它用于非常大的文件(几GB),因此它必须快速且资源有效。理想情况下,如果必须计算新行,则wc -l
的表现水平相同。
答案 0 :(得分:4)
您可以将grep -o
与wc -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