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.
em tmp
, digito um caractere único, mas wc -c
mostra 2
, por quê?
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
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