Pipelines declarativos en Nushell
Metadatos de la lección
- Autoría:
- Ignacio Slater-Muñoz
- Última actualización:
- 27 de marzo de 2026
Cambios recientes:
-
8880728· 27 de marzo de 2026 · ✨ feat(notes): add abstract slots and Python structured-output lesson ( GitLab / GitHub ) -
a6f279d· 27 de marzo de 2026 · 📝 feat(pipelines): expand the Nushell lesson examples ( GitLab / GitHub ) -
67ea712· 27 de marzo de 2026 · ✨ feat(bibliography): add catalog-backed video references ( GitLab / GitHub )
Encuentra el código de la lección:
Abstract
Nushell y PowerShell comparten la idea de expresar trabajo como una secuencia de transformaciones, pero ponen el foco en modelos distintos de dato. En Nushell, el pipeline suele hacer más visible la forma estructurada de records, listas y tablas.
En esta lección compararemos ambos enfoques y veremos operaciones nucleares como filtrar, proyectar, ordenar y limitar. El objetivo no es decidir cuál herramienta es «mejor» , sino entender en qué escenarios la simplicidad declarativa de Nushell resulta especialmente conveniente.
El pipeline en Nushell: datos con forma visible
Pipeline declarativo en Nushell
En Nushell, el pipeline conecta comandos que transforman datos estructurados, como records, listas y tablas. Igual que en PowerShell, la intención se expresa como una secuencia de transformaciones, pero aquí la forma del dato suele mantenerse más visible durante el flujo.
Por eso Nushell resulta especialmente cómodo cuando el problema se parece a una colección homogénea de datos: archivos, filas de CSV, resultados JSON o respuestas de API con estructura relativamente estable.
En ese escenario, inspeccionar columnas, seleccionar campos, filtrar filas y reformatear resultados suele ser más directo, porque la forma del dato se mantiene explícita durante el pipeline.
Trade-off práctico: simplicidad vs generalidad
PowerShell también puede usarse cuando lo que importa es la forma del dato, pero su paradigma de orientación a objetos (OOP) más completo permite además asociar comportamiento y funcionalidades a los objetos.
Nushell prioriza un modelo más simple y declarativo, centrado en transformar estructura visible. Esa simplicidad acelera muchos flujos tabulares, con el costo de cubrir menos escenarios donde el comportamiento del objeto es parte central del problema.
Tip
Operaciones nucleares del pipeline
Equivalencias pedagógicas útiles
Precaución
- Filtrar:
ocupa el lugar conceptual dewherewhere.Where-ObjectWhere-Object - Proyectar columnas:
deja visibles solo las columnas relevantes y conserva la estructura tabular.selectselect - Extraer campos:
accede al contenido de una columna, campo o ruta dentro del dato. En muchos casos cumple un papel parecido al de expandir una propiedad en PowerShell.getget - Ordenar y limitar:
ysort-bysort-bypermiten expresar con claridad el patrón ordenar y luego quedarse con una parte.firstfirst - Transformar:
eupdateupdatesirven para modificar o agregar columnas, mientras queinsertinsertpermite transformar cada elemento de forma más general.eacheach - Renombrar columnas:
ayuda a adaptar la forma del dato cuando necesitas alinear nombres entre etapas del pipeline.renamerename
Cuándo conviene cada enfoque
- Nushell suele destacar cuando la tarea es transformar datos con forma homogénea de principio a fin.
- PowerShell suele ser más natural cuando, además de forma, necesitas aprovechar objetos con comportamiento y ecosistemas amplios de cmdlets y bibliotecas.
Un pipeline básico en Nushell
open companions.json |
where on_the_quest |
select name kind role |
sort-by name |
first 10╭───┬─────────┬────────┬─────────╮
│ # │ name │ kind │ role │
├───┼─────────┼────────┼─────────┤
│ 0 │ Balin │ dwarf │ warrior │
│ 1 │ Bilbo │ hobbit │ burglar │
│ 2 │ Gandalf │ wizard │ guide │
│ 3 │ Thorin │ dwarf │ leader │
╰───┴─────────┴────────┴─────────╯ Detalles clave
-
deserializa automáticamente formatos como JSON y entrega una estructura ya navegable.openopen -
expresa el filtro directamente sobre la columna, sin bloque adicional; la condición se lee más cerca de los datos que transforma.where on_the_questwhere on_the_quest -
deja visibles solo las columnas relevantes, manteniendo la estructura tabular.selectselect -
ordena la tabla según la columna indicada antes de limitar los resultados.sort-by namesort-by name -
limita resultados al final, después de filtrar, proyectar y ordenar.firstfirst
Variaciones sobre el mismo dataset
Nota breve sobre bloques y “lambdas”
Cuando encuentres expresiones como o
each {|item| $item }each {|item| $item }, conviene leerlas como bloques parametrizados. Si vienes de otros lenguajes, cumplen un papel parecido
al de una lambda: reciben un valor, lo nombran y producen un resultado.
update role {|row| $row }update role {|row| $row }
La sintaxis general es . Entre las barras
verticales declaras el nombre del parámetro y, dentro del cuerpo, accedes a ese
valor con {|param| body }{|param| body } o a sus campos con expresiones como
$param$param.
$param.name$param.name
Una ventaja de Nushell es que pequeñas variaciones sobre el mismo dataset se traducen en cambios pequeños y legibles dentro del pipeline. La estructura base se conserva y puedes decidir si filtrar, resumir, ordenar, transformar cada fila o enriquecer la tabla.
open companions.json | where on_the_questopen companions.json |
where on_the_quest |
select name kind role |
sort-by name |
first 10eacheach open companions.json |
where on_the_quest |
sort-by name |
each {|companion| $"($companion.name) the ($companion.kind)" }eacheach cambia la forma del flujo: de una tabla de
records a una lista de valores derivados.
╭───┬────────────────────╮
│ 0 │ Balin the dwarf │
│ 1 │ Bilbo the hobbit │
│ 2 │ Gandalf the wizard │
│ 3 │ Thorin the dwarf │
╰───┴────────────────────╯getget open companions.json |
where on_the_quest |
sort-by name |
get name╭───┬─────────╮
│ 0 │ Balin │
│ 1 │ Bilbo │
│ 2 │ Gandalf │
│ 3 │ Thorin │
╰───┴─────────╯renamerename open companions.json |
where on_the_quest |
sort-by name |
select name role |
rename companion quest_role╭───┬───────────┬────────────╮
│ # │ companion │ quest_role │
├───┼───────────┼────────────┤
│ 0 │ Balin │ warrior │
│ 1 │ Bilbo │ burglar │
│ 2 │ Gandalf │ guide │
│ 3 │ Thorin │ leader │
╰───┴───────────┴────────────╯updateupdate e
insertinsert open companions.json |
where on_the_quest |
update role {|companion| $companion.role | str upcase } |
insert summary {|companion| $"($companion.name) from ($companion.homeland)" } |
sort-by name |
select name kind role summary╭───┬─────────┬────────┬─────────┬──────────────────────╮
│ # │ name │ kind │ role │ summary │
├───┼─────────┼────────┼─────────┼──────────────────────┤
│ 0 │ Bilbo │ hobbit │ BURGLAR │ Bilbo from The Shire │
│ 1 │ Gandalf │ wizard │ GUIDE │ Gandalf from Valinor │
│ 2 │ Thorin │ dwarf │ LEADER │ Thorin from Erebor │
│ 3 │ Balin │ dwarf │ WARRIOR │ Balin from Erebor │
╰───┴─────────┴────────┴─────────┴──────────────────────╯Conclusiones
Nushell ofrece un pipeline especialmente legible cuando el trabajo consiste en transformar datos con estructura homogénea. En esos casos, operaciones como filtrar, proyectar, ordenar o limitar se combinan con naturalidad con otras como transformar cada elemento o enriquecer columnas, manteniendo la forma del dato visible durante todo el flujo.
Esa claridad no reemplaza a PowerShell en todos los escenarios, pero sí muestra un trade-off importante: Nushell simplifica muchos procesos tabulares precisamente porque privilegia un modelo más declarativo y menos centrado en objetos con comportamiento. Cuando la tarea consiste en leer una tabla, ajustarla y producir otra salida estructurada, esa elección suele traducirse en menos fricción para quien mantiene el script.
Puntos clave
- Nushell destaca cuando la estructura del dato permanece visible y estable de principio a fin.
- Su pipeline favorece transformaciones pequeñas y legibles sobre records, listas y tablas, incluso cuando cambias de filtrar a resumir o derivar nuevas salidas.
- Comandos como
,eacheacheupdateupdateayudan a transformar o enriquecer datos sin romper el flujo declarativo.insertinsert - El trade-off entre simplicidad declarativa (Nushell) y mayor generalidad orientada a objetos (PowerShell) guía qué herramienta resulta más natural en cada tarea.
¿Qué nos llevamos?
Al diseñar scripts o bibliotecas pequeñas, no basta con preguntarse qué herramienta “puede” resolver el problema. También conviene pensar qué modelo de dato deja más clara la intención del flujo y reduce mejor la fricción para leer, transformar y reutilizar resultados.
Desde esa perspectiva, Nushell resulta especialmente atractivo cuando la tarea se parece a una cadena de transformaciones sobre datos visibles y reutilizables. La próxima lección toma esa base y avanza hacia pipeline-awareness: diseñar comandos que participen de forma natural en flujos encadenados y respeten la forma de los datos de entrada y salida.
¿Con ganas de más?
Referencias recomendadas
- “ Pipelines ” en NushellCapítulo central del libro de Nushell sobre cómo se componen los pipelines más allá de la intuición básica de «encadenar comandos» . Recorre la idea de entradas, filtros y salidas, explica con bastante detalle cómo funciona
en expresiones, cierres y bloques, y muestra qué cambia cuando el flujo involucra comandos externos, renderizado tabular o conversiones a texto. Vale la pena si quieres profundizar en el modelo mental del pipeline en Nushell y no solo memorizar comandos sueltos.$in$in
Notas
- Ejemplo inspirado en The Hobbit de J.R.R. Tolkien. Volver