Por que 'wc -c' sempre conta mais 1 caractere?

3

em tmp , digito um caractere único, mas wc -c mostra 2 , por quê?

    
por linux 06.07.2011 / 07:58

3 respostas

7

Porque as novas linhas são caracteres também. Diga ao seu editor de texto para não adicionar um no final do arquivo. Não, não sei como.

    
por 06.07.2011 / 08:00
9

Uma maneira é tr para excluir novas linhas, e você pode contar os caracteres.

Comportamento padrão:

echo HELLO | wc -m
# result: 6
echo -n HELLO | wc -m
# result: 5

Para mostrar a contagem de caracteres de nova linha encontrados:

echo HELLO | wc -l
# result: 1
echo -n HELLO | wc -l
# result: 0

Desmarque o caractere de nova linha e conte os caracteres:

echo HELLO | tr -d '\n' | wc -m
# result: 5

Desmarque o caractere de nova linha (e possíveis retornos com \r ) e conte os caracteres para um arquivo de entrada:

tr -d '\n\r' < input.txt | wc -m
    
por 01.11.2012 / 21:02
0

Eu tenho usado uma sugestão semelhante à do wabbit para meus cálculos.

as a workaround, you could count newlines with wc -l and substract them from the count of wc -c.

function num_chars () {
    # echo -e tells echo to honor certain sequences like \n
    chars=$(echo -e "${1}" | wc -c)
    lines=$(echo -e "${1}" | wc -l)
    real_chars=$(echo "$chars - $lines" | bc)
    echo "$real_chars"
}

num_chars "hello Dolly"
11 #Result
num_chars "hello
dolly"
11 #Result
num_chars "hello \nDolly"
11 #Result
    
por 12.03.2017 / 23:17