Salida estructurada en Nushell (comparativa con PowerShell)
Encuentra el código de la lección:
Idea general
Abstract
Dado que ya leíste la lección de «salida estructurada» en PowerShell, aquí nos centraremos en Nushell. La noción es parecida: registros (equivalentes a objetos con propiedades) que se muestran en tablas. La diferencia clave es que el pipeline de Nushell es nativamente estructurado, lo que hace más directas muchas transformaciones.
Registros y tablas en Nushell
Crear un “registro” y verlo en tabla
Registro y conversión
# Crear un registro (equivalente a un objeto con propiedades)
let person = { FirstName: 'Miles', LastName: 'Edgeworth' }
# Acceder a propiedades y proyectar
$person | get FirstName # => 'Miles'
$person | select FirstName LastName | table
# Convertir a JSON de forma directa
$person | to json ¿Qué acabamos de hacer?
- Record:
{ campo: valor }crea un registro.get,selectytablepermiten manipular y visualizar datos sin convertirlos a texto. - Serialización:
to json,to csv,to yamlestán integrados en el pipeline.
Comandos propios que devuelven estructura
En Nushell podemos definir comandos que devuelvan registros del mismo modo que en PowerShell devolvimos [PSCustomObject].
new-person en Nushell
# Definir un comando que devuelve un registro
def new-person [first: string, last: string] {
{ FirstName: $first, LastName: $last }
}
# Usarlo y mostrar salida tabular
[
(new-person 'Naoki' 'Urasawa')
(new-person 'Chiaki' 'J. Konaka')
] | table ¿Qué acabamos de hacer?
- Firma: la firma de
defpermite tipar parámetros (string,int, etc.). La salida es un record que el pipeline entiende como “fila”. - Lista de filas: Un array de registros se muestra como tabla sin formateadores extra.
Análogo del ejercicio: resumen de conexión (Nushell)
Comando con resultado “éxito/fallo”
Resultado tabular en Nushell
# Simular un test de conectividad y devolver un registro
def test-connection-summary [address: string] {
let ok = $address =~ '^[A-Za-z0-9-]+(?:\.[A-Za-z0-9-]+)*(?::\d+)?$'
{ Address: $address, Status: $ok, CheckedAt: (date now) }
}
let r1 = (test-connection-summary 'toshihiko.kifuken.jp')
let r2 = (test-connection-summary 'shokujinki@net')
[$r1, $r2] | table¿Qué ofrece Nushell que PowerShell no trae de fábrica?
¿Qué acabamos de hacer?
- DataFrames con Polars (plugin): con el plugin
polarspuedes convertir datos tabulares en dataframes y hacer proyecciones/aggregaciones de forma declarativa y perezosa (lazy). PowerShell puede lograr algo similar con módulos externos o .NET, pero no lo trae listo out‑of‑the‑box. - Pipeline siempre estructurado: en nu, muchos comandos del core emiten registros/filas en vez de texto. Aunque PowerShell también es orientado a objetos, en Nushell esta coherencia es aún más estricta para operaciones del día a día (por ejemplo,
openseguido defrom json/from csvse encadenan sin fricción).
Ejemplo con Polars (si el plugin está instalado)
Agregaciones tabulares con dataframe
# Requiere el plugin de polars habilitado
open ./data/sales.csv
| into df
| select [region amount]
| group-by region
| agg sum amount
| sort-by amount -r
| to tableEn PowerShell podrías lograrlo con bibliotecas de .NET o módulos externos, pero no es parte del núcleo. En Nushell, el flujo tabular se mantiene dentro del mismo pipeline.