wc -c
retorna as contagens de bytes.
wc -m
retorna as contagens de caracteres.
Como sua função calcula o número de caracteres, acho que o número de saída de sua função deve corresponder à saída de wc -m
.
Sou bastante novo para bater e estou tentando contar o número de caracteres em um arquivo. Eu escrevi a seguinte função:
function chars(){
m=$(cat $1)
m=${#m}
echo $m
}
chamando-o com echo $(chars $2)
resulta em um arquivo o número 524, enquanto chama wc -c
nos mesmos resultados de arquivo 525. O que causa a diferença? Como posso obter o mesmo resultado? (e como uma questão secundária - posso combinar as duas primeiras linhas da minha função em uma?)
wc -c
retorna as contagens de bytes.
wc -m
retorna as contagens de caracteres.
Como sua função calcula o número de caracteres, acho que o número de saída de sua função deve corresponder à saída de wc -m
.
Você pode tentar o comando wc
da seguinte forma:
echo -n file | wc -m
Dessa forma, o caractere extra de nova linha não será contado por wc
. Normalmente, há um caractere de nova linha (adicionado pelo editor) no final dos arquivos, que é contado por wc
. Então, se você quiser contar esse caractere também, você deve modificar sua solução, caso contrário sua função funcionará bem.
Sem ver seu arquivo, é difícil dizer por que conclusivamente, mas aqui está um pequeno arquivo de exemplo que mostra um problema em contar no Bash dessa maneira:
$ cat afile
blah
blah
<EOF>
O <EOF>
não está realmente no arquivo, ele está lá apenas para mostrar a todos que esse arquivo tem duas linhas em branco no final. Então, apenas contando esse arquivo, ele tem 12 caracteres, assumindo 8 + 4 (feeds de linha).
Contando este arquivo usando os métodos típicos:
$ wc -m afile
12 afile
Número de bytes:
$ wc -c afile
12 afile
Usando seu método:
$ m=$(< afile)
$ echo ${#m}
9
Parece que esse método de contagem não funciona como você espera. Não pode contar os caracteres de fim de linha ( \n
) que estão presentes nas linhas que não contêm outros caracteres.
Com base na sua explicação do problema, 524 vs 525, parece que o arquivo de exemplo tem uma linha em branco.
Eu usaria wc
neste aplicativo e não tentaria criar minha própria solução. Estas ferramentas existem por uma razão, não reinventam a roda. O Unix tem mag magas já feitas para o seu carro.
Tags bash