我想从EOF字符开始检查文件中的字符数。谁能告诉我如何通过shell脚本来做到这一点
Answers:
这样做:
wc -c filename
如果只希望计数而不在输出中重复文件名:
wc -c < filename
编辑:
使用-m
数字符而不是字节(如图塞巴斯蒂安的答案)。
open()
。一种执行您想要的方式的方法是grep -o '\<word\>' file | wc -l
#!/bin/sh
wc -m $1 | awk '{print $1}'
wc -m
计算字符数;的awk
命令仅打印字符数,而忽略文件名。
wc -c
将为您提供字节数(可以与字符数不同,这取决于您可能在几个字节上编码一个字符)。
wc -m < "$1"
)读取,这意味着您不必通过awk传递输出来删除文件名。
cut -f1 -d' '
相反,使用起来更方便。
要获取字符串的准确字符数,请使用printf(而不是echo,cat或直接在文件上运行wc -c),因为使用echo,cat等将计算换行符,这将为您提供包括换行符。因此,如果使用echo等,则文本为“ hello”的文件将显示6,但是如果使用printf,则它将返回精确的5,因为没有换行元素要计数。
如何使用printf计数字符串中的字符:
$printf '6chars' | wc -m
6
要将其转换为脚本,可以在文本文件上运行以计算字符数,将以下内容保存在名为print-character-amount.sh的文件中:
#!/bin/bash
characters=$(cat "$1")
printf "$characters" | wc -m
在包含上述文本的文件print-character-amount.sh上使用chmod + x,将文件放置在PATH中(即/ usr / bin /或.bashrc文件中作为PATH导出的任何目录),然后对文本文件类型运行脚本:
print-character-amount.sh file-to-count-characters-of.txt
下面的脚本经过测试,可以准确给出预期的结果
\#!/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
查找文件的大小,因为文件系统已经知道了,而不是使整个文件必须用awk
或来读取,wc
尤其是如果是多GB的文件或一个可能不在HSM上的文件系统中的文件。
stat -c%s file
是的,我承认它不能解决多字节字符的问题,但可以补充一点,OP从未明确这是否是一个问题。
stat
并wc
花了0.001S告诉我的字节数在1GB的文件,顺便说一句。