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

时间:2011-02-17 07:32:58

标签: linux shell

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

8 个答案:

答案 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)上进行了测试。