contando chars usando o bash

3

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?)

    
por elyashiv 03.11.2013 / 11:55

3 respostas

3

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 .

    
por 03.11.2013 / 12:11
1

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.

    
por 03.11.2013 / 13:44
0

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:

Exemplo

$ 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.

Seu problema

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.

    
por 03.11.2013 / 14:44

Tags