通过shell脚本计算文件中的字符数

我想检查文件中从开始到EOF字符的字符数。 任何人都可以告诉我如何通过shell脚本来做到这一点

这将做到这一点:

wc -c filename 

如果您只想输出中没有重复文件名的计数:

 wc -c < filename 

编辑:

使用-m来计算字符而不是字节(如Sébastien的答案所示)。

 #!/bin/sh wc -m $1 | awk '{print $1}' 

wc -m统计字符的数量; awk命令仅打印字符数,省略文件名。

wc -c会给你的字节数(可以是不同的字符数,取决于编码,你可能有一个字符编码几个字节)。

 awk '{t+=length($0)}END{print t}' file3 

要得到string的确切字符数,可以使用printf,而不是echo,cat,或者直接在文件上运行wc -c,因为使用echo,cat等会计算一个换行符,这会给你的字符数量换行符。 所以,如果你使用echo等文件,那么一个带有“hello”文本的文件将会打印6,但是如果你使用printf,它会返回确切的5,因为这里没有换行符。

如何使用printf来计算string中的字符:

 $printf '6chars' | wc -m 6 

要将其转换为脚本,您可以在文本文件上运行以计算字符数,将以下内容保存在名为print-character-amount.sh的文件中:

 #!/bin/bash characters=$(cat "$1") printf "$characters" | wc -m 

chmod + x在文件print-character-amount.sh中包含上面的文本,将文件放在PATH中(例如,/ usr / bin /或任何以.bashrc文件forms导出为PATH的目录),然后在文本文件types上运行脚本:

 print-character-amount.sh file-to-count-characters-of.txt 

awk只

 awk 'BEGIN{FS=""}{for(i=1;i<=NF;i++)c++}END{print "total chars:"c}' file 

只有壳

 var=$(<file) echo ${#var} 

ruby(1.9+)

 ruby -0777 -ne 'print $_.size' file 

以下脚本经过testing并给出了预期的结果

 \#!/bin/bash echo "Enter the file name" read file echo "enter the word to be found" read word count=0 for i in \`cat $file` do if [ $i == $word ] then count=\`expr $count + 1` fi done echo "The number of words are $count" 

我会认为最好是使用stat来查找文件的大小,因为文件系统已经知道了,而不是使用awkwc来读取整个文件 – 尤其是如果它是一个多文件系统, GB文件或可能不在HSM文件系统中的文件。

 stat -c%s file 

是的,我承认它没有考虑多字节字符,但会补充说,OP从来没有澄清这是否是一个问题。