linux shell wc -c conta caracteres +1

linux shell wc -c conta caracteres +1

Usei o comando wc -c para contar o número de caracteres, mas me deu um número errado, número de caracteres mais um como exemplo:

echo "k" | wc -c 

isso me dá 2 caracteres

então por que não 1?

Responder1

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 no seu resultado. Você pode contornar isso usando uma das alternativas mostradas abaixo; -wconta o número de palavras e -lconta o número de linhas.

echo "k" | wc -w 
echo "k" | wc -l

Você pode canalizar a saída de wcto awkpara obter 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 ($1 para awk), número de palavras e número de caracteres ($3 para awk) nesta ordem.

Responder2

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 ver issoinvisívelpersonagem, você pode despejar stream 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

Responder3

É porque você está usando echo, que adiciona uma nova linha à sua string. Use printfem vez disso:

$ echo k | wc -c 
       2
$ printf k | wc -c
       1

informação relacionada