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, select y table permiten manipular y visualizar datos sin convertirlos a texto.
  • Serialización: to json, to csv, to yaml está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 def permite 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 polars puedes 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, open seguido de from json/from csv se 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 table

En 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.