shell linux wc -c conta os caracteres +1

11

Eu usei o comando wc -c para contar o número de caracteres, mas ele me dá um número errado, número de caracteres mais um como exemplo:

echo "k" | wc -c 

me dá 2 caracteres

então por que não 1?

    
por Mohammad Karmi 30.12.2012 / 10:30

3 respostas

16

Veja a mensagem de ajuda para wc . A opção -c imprime o número de caracteres. O comando echo inclui um caractere de nova linha por padrão. Quando wc vê 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; -w conta o número de palavras e -l conta o número de linhas.

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

Você pode canalizar a saída de wc para awk para obter o número de caracteres excluindo os caracteres de nova linha:

wc <filename> | awk '{print $3-$1}'

A saída padrão de wc sem opções imprime o número de caracteres de nova linha ($ 1 a awk), número de palavras e número de caracteres ($ 3 a awk) nesta ordem.

    
por 30.12.2012 / 10:39
9

quando você echo "k" , o comando echo acrescenta um caractere de nova linha ao que você pediu para imprimir ("k"). Você pode usar a opção -n para desabilitar isso:

echo -n k | wc -c
1

Para visualizar esse caractere invisível , você pode fazer o dump stream com od ou 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
    
por 30.12.2012 / 18:48
4

É porque você está usando echo (que tem um retorno de carro), em vez disso usa printf:

$ echo k | wc -c 2

$ printf k | wc -c 1
    
por 01.12.2014 / 16:14

Tags