Cómo usar el comando wc en Linux

fatmawati achmad zaenuri / Shutterstock.com

Contar el número de líneas, palabras y bytes en un archivo es útil, pero la flexibilidad real de Linux wc El comando proviene de trabajar con otros comandos. Vamos a ver.

→ Índice de contenidos

¿Qué es el comando wc?

los wc comando es una pequeña aplicación. Es una de las principales utilidades de Linux, por lo que no es necesario instalarla. Ya estará en su computadora Linux.

Puede describir lo que hace en muy pocas palabras. Cuenta las líneas, palabras y bytes en un archivo o selección de archivos e imprime el resultado en una ventana de terminal. También puede tomar su entrada de la secuencia STDIN, lo que significa que el texto que desea que procese se puede canalizar en él. Aquí es donde wc realmente comienza a agregar valor.

Es un gran ejemplo del mantra de Linux de "haz una cosa y hazla bien". Debido a que acepta entradas canalizadas, puede usarse en conjuros de múltiples comandos. Como veremos, esta pequeña utilidad independiente es en realidad un gran jugador de equipo.

Una forma que uso wc es como marcador de posición en un comando complicado o alias que estoy cocinando. Si el comando terminado tiene el potencial de ser destructivo y eliminar archivos, a menudo uso wc como sustituto del comando real y peligroso.

De esa forma, durante el desarrollo del comando, obtengo información visual de que cada archivo se está procesando como esperaba. No hay posibilidad de que suceda algo malo mientras lucho con la sintaxis.

Tan simple como wc Es decir, todavía hay algunas pequeñas peculiaridades que debe conocer.

Primeros pasos con wc

La forma más sencilla de usar wc es pasar el nombre de un archivo de texto en la línea de comando.

wc lorem.txt

Usando wc con un archivo con una larga línea de texto

Esto causa wc para escanear el archivo y contar las líneas, palabras y bytes, y escribirlos en la ventana del terminal.

Las palabras se consideran cualquier cosa limitada por espacios en blanco. Si son palabras de un idioma real o no, es irrelevante. Si un archivo no contiene nada más que "frd g lkj", todavía cuenta como tres palabras.

Las líneas son secuencias de caracteres que terminan en un retorno de carro o al final del archivo. No importa si la línea se ajusta en su editor o en la ventana de la terminal, hasta que wc encuentra un retorno de carro o el final del archivo, sigue siendo la misma línea.

Nuestro primer ejemplo encontró una línea en todo el archivo. Aquí está el contenido del archivo “lorem.txt”.

cat lorem.txt

El contenido del archivo con una línea larga.

Todo eso cuenta como una sola línea porque no hay retornos de carro. Compare esto con otro archivo, "lorem2.txt", y cómo wc lo interpreta.

wc lorem2.txt
cat lorem2.txt

Usando wc con un archivo con muchas líneas

Esta vez, wc cuenta 15 líneas porque se han insertado retornos de carro en el texto para comenzar una nueva línea en puntos específicos. Sin embargo, si cuenta las líneas con texto, verá que solo hay 12.

Las otras tres líneas son líneas en blanco al final del archivo. Estos contienen sólo retornos de carro. Aunque no hay texto en estas líneas, se ha iniciado una nueva línea y así wc los cuenta como tales.

Podemos pasar tantos archivos a wc como nos gusta

wc lorem.txt lorem2.txt

Usando wc con dos archivos

Obtenemos las estadísticas para cada archivo individual y un total para todos los archivos.

También podemos usar comodines para poder seleccionar archivos coincidentes en lugar de archivos con nombres explícitos.

wc *.txt *.?

Usando wc con comodines

Las opciones de la línea de comandos

Por defecto, wc mostrará las líneas, palabras y bytes en cada archivo. Es lo mismo que usar el -l (líneas) -w (palabras) y -c (bytes) opciones.

wc lorem.txt
wc -l -w -c lorem.txt

Uso de wc con las opciones de líneas, palabras y bytes

Podemos especificar qué combinación de figuras queremos ver.

wc -l lorem.txt

wc -w lorem.txt

wc -c lorem.txt

wc -l -c lorem.txt

Usando wc con combinaciones de opciones

Debe prestarse especial atención a la última cifra, generada por el -c (bytes) opción. Muchas personas confunden esto con contar los caracteres. en realidad cuenta bytes. El número de caracteres y el número de bytes bien podrían ser los mismos. Pero no siempre.

Veamos el contenido de un archivo llamado "unicode.txt".

cat unicode.txt

El contenido de un archivo que contiene un carácter no latino

Tiene tres palabras y un carácter del alfabeto no latino. vamos a dejar wc procesar el archivo con su configuración predeterminada de bytesy lo haremos de nuevo, pero solicite caracteres con el -m (caracteres) opción.

wc unicode.txt
wc -l -w -m unicode.txt

Contando los bytes en un archivo y luego contando los caracteres en el mismo archivo

Hay más bytes que caracteres.

Echemos un vistazo al volcado hexadecimal del archivo y veamos qué está pasando. los hexdump de comando -C La opción (canónica) muestra los bytes del archivo en líneas de 16, con su equivalente ASCII simple (si lo hay) al final de la línea. Si no hay ningún carácter ASCII correspondiente, un punto "."Se muestra en su lugar.

hexdump -C unicode.txt

Un volcado hexadecimal de un archivo corto con un carácter no latino

En ASCII, un valor hexadecimal de 0x20 representa un carácter de espacio. Si contamos tres valores desde la izquierda, vemos que el siguiente valor es un carácter de espacio. Así que los primeros tres valores 0x62, 0x6fy 0x79 representar las letras en "niño".

saltando sobre el 0x20vemos otro conjunto de tres valores hexadecimales: 0x63, 0x61y 0x74. Estos deletrean "gato". Saltando sobre el siguiente carácter de espacio, vemos tres valores más para las letras en "perro". Estos son 0x64, 0x5fy 0x67.

Justo detrás de la palabra "perro" podemos ver un carácter de espacio 0x20y cinco valores hexadecimales más. Los dos últimos son retornos de carro, 0x0a.

Los otros tres bytes representan el carácter no latino, que hemos marcado en verde. Es un carácter Unicode y se necesitan tres bytes para codificarlo. Estos son 0xe1, 0xafy 0x8a.

Así que asegúrese de saber lo que está contando y de que los bytes y los caracteres no tienen por qué ser iguales. Por lo general, contar bytes es más útil porque te dice lo que realmente está en el interior el archivo. Contar por caracteres te da el número de cosas representado por el contenido del archivo.

RELACIONADO: ¿Qué son las codificaciones de caracteres como ANSI y Unicode, y en qué se diferencian?

Tomar nombres de archivo de un archivo

Hay otra forma de proporcionar nombres de archivo a wc . Puede poner los nombres de archivo en un archivo y pasar el nombre de que archivo a wc. Abre el archivo, extrae los nombres de archivo y los procesa como si se hubieran pasado en la línea de comandos. Esto le permite almacenar una colección arbitraria de nombres de archivo para su reutilización.

Pero hay un problema, y ​​es uno grande. Los nombres de los archivos deben ser nulo rescindido, no retorno de carro terminado. Es decir, después de cada nombre de archivo debe haber un byte nulo de 0x00 en lugar del byte de retorno de carro habitual 0x0a.

No puede abrir un editor y crear un archivo con este formato. Por lo general, los archivos como este son generados por otros programas. Pero, si tiene un archivo de este tipo, así es como lo usaría.

Aquí está nuestro archivo que contiene los nombres de archivo. abriéndolo en less te muestra lo extraño"^@"Personajes que less utiliza para indicar bytes nulos.

less source-files-list.txt

Un archivo en menos que contiene bytes nulos

Para usar el archivo con wctenemos que usar --files0-from (leer entrada de) opción y pasar el nombre del archivo que contiene los nombres de archivo.

wc ---files0-from=source-files-list.txt

wc procesando el archivo de nombres de archivo terminados en nulo

Los archivos se procesan exactamente como si se hubieran proporcionado en la línea de comandos.

Tubería Entrada al inodoro

Una forma mucho más común, flexible y productiva de enviar información a wc es canalizar la salida de otros comandos a wc . Esto lo podemos demostrar con el echo dominio.

echo "Count this for me" | wc
echo -e "Count thisnfor me" | wc

Usando echo para enviar entrada a wc

El segundo echo El comando utiliza el -e (caracteres escapados) para permitir secuencias escapadas como "n”Código de formato de nueva línea. Esto inyecta una nueva línea, causando wc para ver la entrada como dos líneas.

Aquí hay una cascada de comandos que alimentan su entrada de uno a otro.

find ./* -type f | rev | cut -d'.' -f1 | rev | sort | uniq
  • encontrar busca archivos (type -f) recursivamente, comenzando en el directorio actual. rev invierte los nombres de archivo.
  • Corte extrae el primer campo (-f1) definiendo el delimitador de campo como un punto ".Y leyendo desde el “frente” del nombre de archivo invertido hasta el primer punto que encuentra. Ahora hemos extraído la extensión del archivo.
  • Rvdo invierte el primer campo extraído.
  • clasificar los ordena en orden alfabético ascendente.
  • único enumera las entradas únicas a la ventana del terminal.

La lista de extensiones únicas en el árbol de directorios actual

Este comando enumera todas las extensiones de archivo únicas en el directorio actual y cualquier subdirectorio.

Si añadimos el -c (contar) opción a la uniq comando contaría el ocurrencias de cada tipo de extensión. Pero si queremos saber cuántas extensiones de archivo diferentes y únicas hay, podemos descartar wc como el último comando en la línea, y use el -l (líneas) opción.

find ./* -type f | rev | cut -d'.' -f1 | rev | sort | uniq | wc -l

Agregar wc para contar las extensiones únicas

RELACIONADO: Cómo usar el comando de corte de Linux

Y finalmente

Aquí hay un último truco wc puede hacer por ti. Le dirá la longitud de la línea más larga en un archivo. Lamentablemente, no te dice qué línea es. Solo te da la longitud.

wc -L taf.c

Obtener la longitud de la línea más larga en un archivo con wc

Sin embargo, tenga cuidado, las pestañas se cuentan como ocho espacios. Visto en mi editor, hay tres pestañas de dos espacios al comienzo de esa línea. Su longitud real es de 124 caracteres. Por lo que la cifra reportada se amplía artificialmente.

Trataría esta función con una gran pizca de sal. Y con eso quiero decir que no lo uses. Su salida es engañosa.

A pesar de sus peculiaridades, wc es una gran herramienta para introducir comandos canalizados cuando necesita contar todo tipo de valores, no solo las palabras en un archivo.

RELACIONADO: 37 comandos importantes de Linux que debe conocer

Subir Change privacy settings