我想检查文件中的字符数是否从启动到EOF字符。任何人都可以通过shell脚本告诉我如何做到这一点
答案 0 :(得分:93)
这样做:
wc -c filename
如果您只想在输出中重复没有文件名的计数:
wc -c < filename
修改强>
使用-m
计算字符而不是字节数(如Sébastien的回答所示)。
答案 1 :(得分:23)
#!/bin/sh
wc -m $1 | awk '{print $1}'
wc -m
计算字符数; awk
命令仅打印字符数,省略文件名。
wc -c
将为您提供字节数(可以与字符数不同,具体取决于您可能在几个字节上编码的字符的编码)。
答案 2 :(得分:4)
awk '{t+=length($0)}END{print t}' file3
答案 3 :(得分:3)
要获得字符串的确切字符数,请使用printf,而不是echo,cat或直接在文件上运行wc -c,因为使用echo,cat等将计算换行符,这将为您提供金额字符包括换行符。所以带有文本&#39;你好&#39;的文件如果你使用echo等将打印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
答案 4 :(得分:1)
仅限awk
awk 'BEGIN{FS=""}{for(i=1;i<=NF;i++)c++}END{print "total chars:"c}' file
仅限shell
var=$(<file)
echo ${#var}
红宝石(1.9 +)
ruby -0777 -ne 'print $_.size' file
答案 5 :(得分:0)
测试以下脚本并准确提供预期的结果
\#!/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"
答案 6 :(得分:0)
我原本认为最好使用stat
来查找文件的大小,因为文件系统已经知道它,而不是导致必须使用{{1}读取整个文件}或awk
- 特别是如果它是一个多GB文件或者可能在HSM上的文件系统中不驻留的文件。
wc
是的,我承认它不考虑多字节字符,但会补充说OP从未澄清这是否是一个问题。
答案 7 :(得分:0)
归功于user.py等。
echo "ää" > /tmp/your_file.txt
cat /tmp/your_file.txt | wc -m
得出3
。
在我的示例中,结果应为2
(字母ä
的两倍)。但是,echo(或vi)在输出(或文件)的末尾添加一个换行符\n
。因此,计算了两个ä
和一个Linux换行符\n
。那是三个。
使用管道|
并不是最短的变体,但是我必须精通wc
参数。另外,根据我的经验,cat
是防弹的。
在Ubuntu 18.04.1 LTS(Bionic Beaver)上进行了测试。