El comando wc de #GNU

Veamos qué puede hacer y cómo se usa el comando wc de las herramientas coreutils del sistema GNU

Los comandos de GNU coreutils son las herramientas básicas de nuestros sistemas GNU con kernel Linux similares a las de sistemas Unix, para gestionar desde la línea de comandos el sistema y operaciones con archivos de texto.

En este caso vamos a repasar las opciones del comando wc que sirve para contar las líneas, caracteres y palabras de un archivo u archivos, para utilizarlo en nuestra consola o incorporarlo a nuestros scripts.

En muchos sitios quizás habréis leído sobre este comando que lo que hace es contar el número de líneas de un archivo (o archivos) ¿verdad? ¡Pues es falso! o al menos no es correcto del todo.

El comando cuenta los caracteres de líneas nuevas de un archivo, normalmente representado por \n, además de también contar, palabras y caracteres.

¿Y por qué esa distinción entre líneas y caracteres de nuevas líneas? Vayamos por pasos y poco a poco.

El símbolo $ delante del comando, no es parte del comando y no hay que escribirlo, esto significa que el comando es ejecutado por un usuario sin privilegios de root.

Contador de saltos de línea en un archivo

Para empezar vamos a crear un archivo (sin un salto de línea \n al final del archivo) mediante este comando:

$ echo -n "este archivo tiene 5 palabras" > archivo

Si ahora ejecutamos el comando cat para mostrar el contenido del archivo veremos lo siguiente:

$ cat archivo
este archivo tiene 5 palabras

Como he dicho el comando wc cuenta el número de líneas, el número de palabras y el número de caracteres y los saca por la salida estándar que en este caso sería mostrarlos por pantalla en ese orden junto con el nombre del archivo.

En este caso debería mostrar que el archivo tiene 1 línea, 5 palabras y 29 caracteres ¿no? Veamos qué sucede al ejecutar el comando

$ wc archivo
0 5 29 archivo

Nos dice que no tiene ninguna línea y sí 5 palabras y 29 caracteres. Sucede esto, porque hemos creado el archivo con el comando echo pero sin salto de línea final.

Veamos la diferencia, volviendo a crear el archivo con el comando echo, pero ahora de esta manera (lo que haríamos de manera normal):

$ echo "este archivo tiene 5 palabras" > archivo

A priori el archivo sería igual y si volvemos a mostrarlo con el comando cat, no veríamos ninguna diferencia, pero sí las hay si volvemos a ejecutar el comando wc anterior:

$ wc archivo
1 5 30 archivo

Ahora nuestro archivo sí tiene un salto de línea al final de la única línea que contiene y como verás también ha sumado 1 al contador de caracteres, ya que ahora ese caracter de salto de línea es tomado como tal en la cuenta.

Al editar archivos con un editor de texto, este automáticamente suele añadir esos saltos de línea al final de cada línea.

Palabras para wc

¿Y a qué se refiere una palabra cuando hablamos del comando wc? Una palabra es una secuencia de caracteres delimitadas por espacios en blanco (saltos de línea, tabuladores, etc). Veamos un ejemplo:

$ echo "¿Esto son (¡5 palabras!)?" > archivo
$ wc -w archivo
4 archivo

El contador de palabras del comando wc (más adelante veremos cómo mostrar solo las palabras de un archivo) nos dice que este archivo tiene 4 palabras, para el comando wc los signos de puntuación son irrelevantes.

Vamos a modificar esto añadiendo algunos espacios en blanco para «crear» más palabras para el comando wc:

$ echo "¿Esto son ( ¡5 palabras! ) ?" > archivo
$ wc -w archivo
7 archivo

El añadir más espacios en blanco a los espacios en blanco, no aumenta el número de palabras encontradas:

$ echo "¿Esto son (    ¡5 palabras!     )    ?" > archivo
$ wc -w archivo
7 archivo

Bueno, la introducción ha sido un poco larga, pero me parecía interesante dejar claro el concepto antes de continuar viendo más opciones del comando.

wc con varios archivos

El comando puede ser ejecutado pasándole varios archivos a la vez y mostrará las sumas de líneas, palabras y caracteres mas el nombre del archivo de cada uno de ellos y además un total con la suma de todos. Por ejemplo, en mi caso:

$ wc archivo1 archivo2 archivo3                                       
  1   5  30 archivo1
  4   8  36 archivo2
  4   8  36 archivo3
  9  21 102 total

Filtrando qué muestra el comando wc

Pero quizás no queremos que nos muestre toda esa información porque para nuestro script o nuestra necesidad solo queremos que muestre uno o varios de esos valores, para ello le podemos decir al comando wc qué valor queremos que nos muestre con estas opciones:

  • -c → muestra el valor de bytes del archivo
  • -m → muestra el valor de caracteres del archivo
  • -w → muestra el valor de palabras del archivo
  • -l → muestra el valor de líneas (ya sabes caracteres de nueva línea \n) del archivo

Los valores no son excluyentes, es decir, especificar un valor no elimina que se muestre otro y siempre se mostrarán en orden de líneas, palabras y caracteres, por ejemplo podemos utilizar cualquiera de estos comandos para mostrar los números de lineas y palabras del archivo:

$ wc -wl archivo
$ wc -w -l archivo

Mostrar el valor de la linea mas larga con wc

Otra funcionalidad interesante del comando wc es la de mostrar el valor del número de caracteres de la línea mas larga del archivo con la opción -L

Si especificamos varios archivos, mostrara el valor de la linea mas larga de cada archivo y un total que no es tal, ya que no es la suma de todos los valores, si no el valor mas grande de todos los mostrados:

$ wc -L archivo1 archivo2 archivo3                                       
  30 archivo1
  8 archivo2
  42 archivo3
  42 total

Omitir el nombre del archivo en la salida del comando wc

Al usar este comando, en la salida del resultado nos muestra el nombre del archivo, si queremos utilizar este comando en un script, quizás esa información no nos interesa, por lo que tendríamos que procesar la salida para eliminar el nombre del archivo.

Pero existe una manera para hacer que no se muestre directamente el nombre, utilizando la redirección. El comando muestra el nombre cuando es una opción del comando en la línea de comandos, pero no cuando proviene de la entrada estándar (el teclado) u otra fuente y eso es lo que haremos

Usando el redireccionamiento con <

$ wc -w < archivo
7

Usando la entrada estándar

Hasta ahora hemos visto que el comando wc de GNU cuenta el número de líneas, palabras y caracteres de un archivo o archivos, pero también puede hacerlo de las palabras que introduzcamos desde el teclado con la opción –

Usando la entrada estándar (para acabar de introducir texto usaremos la combinación de teclas Ctrl+d):

$ wc -w -
Introduciendo texto
desde el teclado
(Ctrl-d)
5 -

Y estas serian las opciones mas interesantes del comando wc de GNU. ¿Conocías el comando y su uso? ¿Te parecen interesantes estas series de artículos? Usa los comentarios para comentar sobre ello.

7 comentarios sobre “El comando wc de #GNU

  1. Lo desconocía por completo. Interesante la explicación y de ver como cuenta «tonterías» de paréntesis sueltos, etc (contar palabras no es tontería, eso es interesante).

    En un fichero de programación debe de ser un cachondo cuando pienso en la cantidad de líneas que hay y de { y } que hay sueltos abriendo y cerrando bloques.

    Otra cosa. ¿Has desayunado bien? Porque hay 2 errores garrafales de escritura que escribas en guiri. En Filtrando lo verás en negrita y en Mostrar el valor lo verás debajo de la cabecera.

      1. En Filtrando me refería a:

        Los valores no son excluyentes, es decir, especificar un valor no elimina que se muestre otro y siempre se mostrar en orden de lineas, palabras y caracteres.

        Siempre se mostrar –> el falta el futuro.

        Saludos

Me gustaría saber tu opinión. Deja un comentario (Puedes usar MarkDown)

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Salir /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Salir /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Salir /  Cambiar )

Conectando a %s

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.