Eu usei o comando wc -c para contar o número de caracteres, mas ele me fornece um número errado, número de caracteres mais um como exemplo:
echo "k" | wc -c
me dá 2 caracteres
então porque não 1?
Eu usei o comando wc -c para contar o número de caracteres, mas ele me fornece um número errado, número de caracteres mais um como exemplo:
echo "k" | wc -c
me dá 2 caracteres
então porque não 1?
Respostas:
Dê uma olhada na mensagem de ajuda para wc. A -copção imprime o número de caracteres. O echocomando inclui um caractere de nova linha por padrão. Quando wcvê a nova linha, ela conta como outro caractere e, portanto, a contagem adicional em seu resultado. Você pode contornar isso usando uma das alternativas mostradas abaixo; -wconta o número de palavras e -lo número de linhas.
echo "k" | wc -w
echo "k" | wc -l
Você pode canalizar a saída de wcpara awkobter o número de caracteres excluindo os caracteres de nova linha:
wc <filename> | awk '{print $3-$1}'
A saída padrão wcsem opções imprime o número de caracteres de nova linha (US $ 1 para awk), número de palavras e número de caracteres (US $ 3 para awk) nessa ordem.
echo -n "k" | wc -c. Isso faz sentido
printfgeralmente é preferido antes echoquando a consistência é importante. Ele não imprime uma nova linha, a menos que seja solicitado especificamente, o que printf "k" | wc -mindica 1, ou seja, o número de caracteres impressos. Para contar caracteres na primeira linha de um arquivo, pode-se fazer, por exemplo $(($(head -1 file | wc -m)-1))(envolvê-lo $(())para fazer aritmética de shell para remover a contagem de nova linha) ou ainda melhor: use awk e faça awk 'NR==1{print length}' file.
quando você echo "k", o echocomando acrescenta um caractere de nova linha ao que você pediu para imprimir ("k"). Você pode usar a -nopção para desativar isso:
echo -n k | wc -c
1
Para visualizar esse caractere invisível , você pode despejar o fluxo com odou hd:
echo k | od -t c
0000000 k \n
echo k | hd
00000000 6b 0a |k.|
echo k | od -t a -A n
k nl
-copção é uma contagem de bytes, não uma contagem de caracteres