Usé el comando wc -c para contar el número de caracteres, pero me da un número incorrecto, número de caracteres más uno como ejemplo:
echo "k" | wc -c
me da 2 personajes
Entonces, ¿por qué no 1?
Usé el comando wc -c para contar el número de caracteres, pero me da un número incorrecto, número de caracteres más uno como ejemplo:
echo "k" | wc -c
me da 2 personajes
Entonces, ¿por qué no 1?
Respuestas:
Echa un vistazo al mensaje de ayuda para wc. La -copción imprime el número de caracteres. El echocomando incluye un carácter de nueva línea por defecto. Cuando wcve la nueva línea, la cuenta como otro personaje y, por lo tanto, la cuenta adicional en su resultado. Puede solucionar esto utilizando una de las alternativas que se muestran a continuación; -wcuenta el número de palabras y -lcuenta el número de líneas.
echo "k" | wc -w
echo "k" | wc -l
Puede canalizar la salida de wca awkpara obtener el número de caracteres, excluyendo los caracteres de nueva línea:
wc <filename> | awk '{print $3-$1}'
La salida predeterminada de wcsin opciones imprime la cantidad de caracteres de nueva línea ($ 1 a awk), la cantidad de palabras y la cantidad de caracteres ($ 3 a awk) en este orden.
echo -n "k" | wc -c. Eso tiene sentido
printfmenudo se prefiere antes echocuando la consistencia es importante. No imprime una nueva línea a menos que se le solicite específicamente, por lo que printf "k" | wc -mproporciona 1, es decir, la cantidad de caracteres impresos. Para contar caracteres en la primera línea de un archivo, se puede hacer, por ejemplo $(($(head -1 file | wc -m)-1))(envolverlo $(())para hacer aritmética de shell para eliminar el recuento de nueva línea) o incluso mejor: usar awk y do awk 'NR==1{print length}' file.
cuando usted echo "k", el echocomando agrega un carácter de nueva línea a lo que le pidió que imprimiera ("k"). Puede usar la -nopción para deshabilitar esto:
echo -n k | wc -c
1
Para ver ese personaje invisible , puede volcar la transmisión con odo 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
-copción es un recuento de bytes, no un recuento de caracteres