Pregunta 1¿Qué hace el símbolo de pipe |?
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.
| 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
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
| Comando | Papel en un pipe |
|---|---|
| | Pasa la salida izquierda a la entrada derecha |
wc -l | Cuenta las líneas que recibe |
sort | Ordena alfabéticamente las líneas que recibe |
uniq | Colapsa líneas duplicadas adyacentes en una |
head / tail | Toma 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 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
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.
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.
Verificación de conocimientos
Responde cada pregunta una a una.
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?