Aprende leyendo en orden

Pipes — Encadenar comandos

Aprende cómo un pipe pasa la salida de un comando al siguiente, cuenta líneas con wc -l, ordena con sort y usa el clásico sort | uniq para eliminar duplicados — todo práctico en una terminal del navegador.

¿Qué es un pipe? — el símbolo |

El pipe | es el símbolo que pasa la salida de un comando directamente al siguiente como su entrada.

Al procesar el resultado de un comando con otro, combinas comandos pequeños para realizar la tarea.

Esta es la filosofía de diseño de Unix: construir procesos conectando herramientas de un solo propósito.

La salida fluye hacia la siguiente entrada
cat fruits.txt|wc -lemite las 3 líneaspasa salida a entradarecibe y muestrarecuento 3
| pasa la salida izquierda a la entrada derecha, encadenando comandos de un solo propósito.
echo apple > fruits.txt      # crear línea 1
echo banana >> fruits.txt    # añadir
echo cherry >> fruits.txt    # añadir
cat fruits.txt | wc -l       # contar líneas -> 3
ls / | wc -l                 # número de elementos en la raíz

① Crea la línea 1 con echo apple > fruits.txt, luego añade con echo banana >> fruits.txt y echo cherry >> fruits.txt para hacer un archivo material de 3 líneas.

② Pasa la salida de cat fruits.txt a wc -l a través de un pipe y confirma que se muestra el recuento de líneas.

③ Confirma que el número mostrado coincide con el número de líneas del material. (Ejecútalo correctamente y aparecerá una explicación.)

Linux console
0 / 4 completado(s)
Loading Linux Terminal...

Se puede conectar cualquier cosa

Los pipes no están ligados a comandos específicos.

Cualquier comando que produzca salida estándar y cualquier comando que acepte entrada estándar pueden conectarse libremente.

Hay combinaciones infinitas: ls | wc -l para un recuento de archivos, cat file | sort para ordenar, y muchas más.

echo log1 > lines.txt    # crear línea 1
echo log2 >> lines.txt   # añadir
echo log3 >> lines.txt   # añadir
cat lines.txt | wc -l    # 3
ls /etc | wc -l          # número de elementos en /etc

① Crea la línea 1 con echo x > items.txt, luego añade con echo y >> items.txt y echo z >> items.txt para hacer un material de 3 líneas.

② Pasa la salida de cat items.txt a sort a través de un pipe y confirma que las líneas se muestran ordenadas alfabéticamente.

③ Luego pasa la salida de cat items.txt a sort y ejecuta un pipe de 3 etapas que conecte el resultado a wc -l con un pipe más, y confirma que se muestra el recuento de líneas.

Linux console
0 / 5 completado(s)
Loading Linux Terminal...
ComandoPapel en un pipe
|Pasa la salida izquierda a la entrada derecha
wc -lCuenta las líneas que recibe
sortOrdena alfabéticamente las líneas que recibe
uniqColapsa líneas duplicadas adyacentes en una
head / tailToma solo el inicio / final de lo que recibe

Ordenar — sort

sort es el comando que ordena las líneas que recibe.

Por defecto ordena alfabéticamente (en orden de cadena).

Puede tomar la salida del comando anterior a través de un pipe y pasar el resultado ordenado a pantalla o al siguiente comando.

sort ordena las líneas alfabéticamente
cat fruits.txt|sortbanana / apple / cherrypasa salida a entradaapple / banana /cherry (ordenado)
sort ordena alfabéticamente las líneas recibidas a través de un pipe y las emite.
echo banana > fruits.txt     # crear en orden incorrecto
echo apple >> fruits.txt
echo cherry >> fruits.txt
cat fruits.txt | sort        # ordenado a apple / banana / cherry

① Crea la línea 1 con echo banana > fruits.txt, luego añade con echo apple >> fruits.txt y echo cherry >> fruits.txt para hacer 3 líneas en orden incorrecto.

② Pasa la salida de cat fruits.txt a sort a través de un pipe y confirma que las líneas se muestran ordenadas alfabéticamente.

Linux console
0 / 4 completado(s)
Loading Linux Terminal...

Eliminar duplicados — uniq

uniq es el comando que colapsa líneas duplicadas consecutivas en una sola.

uniq solo mira líneas adyacentes, así que no puede colapsar líneas idénticas que estén separadas.

Cuando quieres reducir los duplicados a una sola línea de forma fiable, el método clásico es sort | uniq: agrupa las líneas iguales una junto a la otra con sort primero y luego conecta a uniq.

Agrupa con sort, colapsa con uniq
cat list.txtsortuniqpear / apple / pear(3 líneas)apple / pear / pear(ordenado)apple / pear(reducido)
sort agrupa los duplicados uno junto al otro y uniq colapsa los duplicados consecutivos en uno.
echo pear > list.txt         # crear con duplicados
echo apple >> list.txt
echo pear >> list.txt
cat list.txt | sort          # apple / pear / pear
cat list.txt | sort | uniq   # apple / pear

Ordena antes de uniq

uniq solo trata como duplicados las líneas adyacentes.

No puede colapsar líneas idénticas que estén separadas, así que cuando quieras reducir duplicados a una línea, ordena primero con sort y luego conecta a uniq.

① Crea la línea 1 con echo pear > list.txt, luego añade con echo apple >> list.txt y echo pear >> list.txt para hacer 3 líneas con duplicados.

② Pasa la salida de cat list.txt a sort a través de un pipe para que las líneas idénticas queden una junto a la otra.

③ Luego conecta esa salida a uniq y confirma que los duplicados adyacentes colapsan en una sola línea.

Linux console
0 / 5 completado(s)
Loading Linux Terminal...
QUIZ

Verificación de conocimientos

Responde cada pregunta una a una.

Pregunta 1¿Qué hace el símbolo de pipe |?

Pregunta 2¿Qué se muestra al ejecutar cat fruits.txt | wc -l?

Pregunta 3Cuando quieres colapsar líneas duplicadas en una, ¿qué comando es efectivo conectar antes de uniq?