Comando wc: contar líneas y palabras, y usar wc -l con tuberías

Entorno de pruebaFamilia RHELAlmaLinux 9.8Cuenta rootVerificado el 2026-10-29

El comando wc es un comando de Linux que cuenta y muestra el número de líneas, palabras y bytes de un archivo. Si cuentas con wc -l las líneas de un archivo de ejemplo de registro de acceso de un servidor web, obtienes 10, y si filtras solo las respuestas 404 con grep y las pasas a wc -l, puedes ver el número de peticiones fallidas, 3, como un solo número.

Los registros, el contenido de los archivos y la carpeta de trabajo /root/work que aparecen abajo son valores de ejemplo. El registro es un archivo de diez líneas creado con direcciones IP reservadas para documentación, y los demás archivos también se crearon para pruebas.

1️⃣ Uso básico del comando wc y cómo leer su salida

La forma básica del comando es wc, las opciones y los archivos, en ese orden. Si das solo un archivo sin opciones, muestra el número de líneas, de palabras y de bytes en ese orden y añade el nombre del archivo al final.

cd /root/work
wc access.log
 10 100 766 access.log

En el resultado de contar el registro de acceso, 10 es el número de líneas, 100 el de palabras y 766 el de bytes.

Para ver un solo número, añade una de las opciones -l, -w o -c.

wc -l access.log
10 access.log
wc -w access.log
100 access.log
wc -c access.log
766 access.log

Si das un archivo que no existe, aparece un mensaje de error y el código de salida es 1.

wc nosuch.txt
wc: nosuch.txt: No such file or directory
echo $?
1

2️⃣ Contar líneas con wc -l y tuberías

Cuando el nombre del archivo sale junto al número de líneas, tienes que recortar el nombre una vez más al guardar el número en una variable de un script. Si pasas el archivo con una redirección (<) o una tubería, wc no conoce el nombre del archivo y muestra solo el número.

wc -l < access.log
10
cat access.log | wc -l
10

Si pones grep antes de la tubería, puedes contar solo las líneas que cumplen una condición. La búsqueda incluyó los espacios antes y después del código de respuesta 404, y tres líneas contenían 404.

grep ' 404 ' access.log | wc -l
3

Para contar cuántas IP se conectaron, recorta solo el primer campo, elimina las líneas repetidas con sort -u y luego cuenta. En el registro de diez líneas había cuatro IP distintas.

cut -d ' ' -f 1 access.log | sort -u
192.0.2.10
192.0.2.44
198.51.100.7
203.0.113.25
cut -d ' ' -f 1 access.log | sort -u | wc -l
4

wc -l cuenta el número de caracteres de salto de línea. Por eso, en un archivo sin salto de línea al final de la última línea, wc -l muestra 1 aunque cat muestre dos líneas.

cat no-newline.txt
first line
last line
wc -l no-newline.txt
1 no-newline.txt

Si el número de líneas sale con una de menos, comprueba primero si la última línea termina con un salto de línea.

3️⃣ Opciones de wc y recuento de caracteres con -c y -m

En UTF-8, las letras inglesas y los dígitos ocupan 1 byte por carácter, mientras que los caracteres coreanos (hangul) y ☕ ocupan 3 bytes cada uno. Por eso, en un archivo solo con texto en inglés, el número de bytes contado con -c y el de caracteres contado con -m coinciden, pero cuando hay coreano los dos números cambian. La comparación usa un archivo con dos líneas de nombres de menú en coreano y una línea en inglés.

cat menu.txt
아메리카노
카페 라테 ☕
tea
wc -c menu.txt
38 menu.txt
wc -m menu.txt
18 menu.txt

-c dio 38 y -m dio 18, una diferencia de 20. Son los 2 bytes de más que ocupa cada uno de los nueve caracteres coreanos y ☕, así que en un archivo con coreano hay que contar con -m para que coincida con el número real de caracteres. La medición se hizo con la configuración regional C.UTF-8 y, según el manual, -m cuenta en las unidades de carácter de la configuración regional.

-L muestra el ancho en pantalla de la línea más larga. En el registro de acceso, la línea más larga tenía 82 columnas; en el archivo de menú, cada carácter coreano y ☕ ocupa dos columnas, así que una línea de 7 caracteres dio 12.

wc -L access.log
82 access.log
wc -L menu.txt
12 menu.txt

Las letras latinas con tilde ocupan 2 bytes por carácter en UTF-8. Se midió aparte con un archivo que solo contiene la línea café.

cat cafe.txt
café
wc -c cafe.txt
6 cafe.txt
wc -m cafe.txt
5 cafe.txt

-c dio 6 y -m dio 5, porque la única é ocupó un byte de más. Las letras inglesas y los dígitos ocupan 1 byte, las letras con tilde como la é ocupan 2 bytes, y los caracteres coreanos y ☕ ocupan 3 bytes, así que el número de bytes cambia aunque haya el mismo número de caracteres.

La tabla reúne el comando adecuado para cada tarea y el número contado en este artículo.

TareaComandoMedido en este artículo
Obtener solo el número de líneaswc -l < access.log10Solo el número, sin el nombre del archivo
Contar las líneas que cumplen una condicióngrep ‘ 404 ‘ access.log | wc -l3Líneas con respuesta 404
Contar valores distintoscut -d ‘ ‘ -f 1 access.log | sort -u | wc -l4Número de IP distintas
Comprobar el tamaño del archivowc -c access.log766Número de bytes
Número de caracteres de un archivo con coreanowc -m menu.txt1838 si se cuenta el mismo archivo con -c
Ancho en pantalla de la línea más largawc -L access.log8212 en el archivo de menú, que cuenta cada carácter coreano como dos columnas
Total de líneas de varios archivoswc -l *.log13Total en la línea total

4️⃣ Totales de varios archivos con wc en Linux

Si das varios archivos, wc muestra una línea por archivo y añade el total en la última línea como total. Si cuentas juntos el registro de acceso y el registro de errores, el 13 de la línea total es la suma de las líneas de los dos archivos.

wc access.log error.log
 10 100 766 access.log
  3  11  76 error.log
 13 111 842 total

Para contar de una vez los registros con la misma extensión, usa un comodín. La shell convierte *.log en nombres de archivo antes de pasarlos, así que el resultado es el mismo que escribir cada nombre de archivo.

wc -l *.log
 10 access.log
  3 error.log
 13 total

Los archivos con extensiones distintas también se cuentan de una vez si escribes sus nombres seguidos. Al contar juntos los dos registros y el archivo de menú, el resultado fue total 16.

wc -l access.log error.log menu.txt
 10 access.log
  3 error.log
  3 menu.txt
 16 total

🔲 Simulador del comando wc

En el simulador de abajo puedes escribir wc tú mismo sobre los archivos de ejemplo del artículo. Con los chips puedes probar -l, -m y el recuento con tuberías, y si añades una línea a access.log y vuelves a contar, sale el número aumentado.

Simulador del comando wcwc, cuenta root
[root@server work]#
Con las teclas ↑↓ recuperas los comandos que escribiste antes.

🔢 FAQ & contenido recomendado

Sí, cuando cuentas las líneas que cumplen una condición en un solo archivo. En el mismo registro de acceso, grep -c con la misma condición también dio 3. grep -c lo resuelve con un solo comando sin tubería, y wc -l se usa para contar la salida de otros comandos además de grep, como sort o cut.

Cuenta como una palabra cada bloque separado por espacios, tabulaciones o saltos de línea. El resultado de [echo ‘log_level=warn timeout = 30’ | wc -w] es 4. log_level=warn, sin espacios, cuenta como una palabra, y el = con espacios a ambos lados cuenta como otra palabra aparte.

Elige solo los archivos con find y pásalos a wc -l. En la carpeta de ejemplo, [find /root/work -type f | wc -l] mostró 5. [ls | wc -l] también dio 5 en la misma carpeta, pero ls también muestra los nombres de las subcarpetas como líneas y no cuenta los archivos que hay dentro.

ℹ️ Aviso de afiliados
El contenido de este sitio incluye enlaces de afiliado. Cuando un visitante compra un producto o servicio a través de uno de ellos, el sitio recibe una comisión del vendedor. El importe que paga el comprador(baja durante las promociones ↓)no aumenta. Los precios, descuentos y existencias publicados corresponden al momento de redacción y pueden variar, así que confírmalos con el vendedor antes de comprar. Los productos se eligen y evalúan con criterios propios, y las comisiones no influyen en el orden ni en el contenido de las reseñas.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Demuestra que eres humano: 6   +   3   =