Qué es NSSort
nssort es la utilidad de ordenación/mezcla/copia compatible con SyncSort de Nacarsoft: sustituto directo de los trabajos SyncSort UNIX sobre ficheros, con la misma sintaxis /OPCION (/INFILE, /OUTFILE, /COPY, /FIELDS, /KEYS, /MERGE, /JOIN…). Solo procesa ficheros locales y stdin/stdout —no requiere cliente Adabas ni integra DB2, SAS o verbos COBOL— y acepta abreviaturas no ambiguas (p. ej. /INF por /INFILE) y formas con = o :.
- Sustituir pasos SyncSort de copia en pipelines ETL y migraciones.
- Copiar por ventanas (
/SKIPRECORD,/STOPAFTER) con memoria acotada. - Validar juegos de opciones sin ejecutar (
/NOEXECUTE).
Versión actual P0: implementa
/COPYmás ventanas de registros y estadísticas. El resto de opciones SyncSort pertenecen al roadmap (ver Alcance honesto). Los ficheros y rutas de los ejemplos son ficticios.
Casos de uso
1. Sustituir un paso SyncSort de copia en un pipeline ETL
nssort /INFILE /data/etl/ficticio-entrada.dat /OUTFILE /data/etl/ficticio-salida.dat /COPY /END
2. Extraer una ventana de registros para una prueba (omitir 100, tomar 1000)
nssort /INFILE /data/ficticio-grande.dat /OUTFILE /data/ficticio-muestra.dat /COPY /SKIPRECORD 100 /STOPAFTER 1000
3. Copiar a stdout con estadísticas para componer con pipes
nssort /INFILE /data/ficticio-entrada.dat /COPY /STATISTICS > /data/ficticio-copia.dat
4. Validar un JCL migrado sin tocar datos antes del despliegue
nssort /INFILE /data/ficticio-entrada.dat /OUTFILE /data/ficticio-salida.dat /COPY /NOEXECUTE
Referencia de comandos
Verificada contra ./nssort/build/nssort_rhel8 --help (más -help, -version y -license-status, comprobados ejecutando el binario). Se aceptan estilo SyncSort (/INFILE x) y estilo nssuite con guion (-infile x, ver INSTALL.md), abreviaturas no ambiguas (/INF, /STAT… → /STATISTICS salvo ambigüedad) y formas /OPC=valor o /OPC:valor.
Operación y ficheros (P0, implementado)
| Parámetro | Descripción | Requerido |
|---|---|---|
/INFILE fichero | Fichero de entrada; debe existir y ser legible | Sí |
/OUTFILE fichero | Fichero de salida (se crea/trunca); si se omite o es -, los registros van a stdout y compone con pipes | No |
/COPY | Copia en streaming (en P0 registro = línea) respetando /SKIPRECORD y /STOPAFTER | Sí (u otra operación futura) |
/END | Terminador opcional (fin de argumentos) | No |
Ventanas, estadísticas y control (P0, implementado)
| Parámetro | Descripción | Requerido |
|---|---|---|
/SKIPRECORD n | Omite los n primeros registros de entrada | No |
/STOPAFTER n | Procesa como máximo n registros de salida (las builds demo limitan además a 50) | No |
/STATISTICS (alias /STATS) | Muestra leídos/escritos/omitidos y tiempo en stderr | No |
/SILENT | Suprime banner, spinner y estadísticas (los exit codes no cambian) | No |
/NOEXECUTE | Valida el juego de opciones (incluida la licencia) y sale con 0 sin tocar datos | No |
Informativos y licencia
| Parámetro | Descripción | Requerido |
|---|---|---|
-version | Muestra versión, build, fecha y plataforma | No |
-license fichero | Ruta del fichero de licencia firmada Ed25519 | No |
-license-status | Muestra el estado de licencia y sale | No |
-help | Muestra la ayuda | No |
Alcance honesto: roadmap, no implementado en P0
Las siguientes palabras clave se aceptan sintácticamente (incluidas abreviaturas) pero terminan con error «not yet implemented» e indican su fase, según doc/COMPATIBILITY.md —no son opciones utilizables todavía: /FIELDS, /KEYS (P2), /MERGE, /JOIN, /JOINKEYS (P4), /REFORMAT, /DERIVEDFIELD, /INCLUDE, /OMIT, /CONDITION, /SUMMARIZE, /AGGREGATE, /COLLECT, /IGNORE, /SKIPBLANK (P3), /STABLE, /CHECKSEQUENCE, /PADBYTE, /PADKEY, /PADRECORD, /RECORDLAYOUT, /DELIMITEDRECORDLAYOUT, /WORKSPACE, /MEMORY, /DATASIZE (P2), /COLLATINGSEQUENCE, /COLUMNS, /REPORT, /SECTION…, /TITLE, /TRAILER (P4), /SAVE, /INSERT, /DELETE, /DISPLAY, /EDIT, /BEGIN, /QUIT (P1). Fuera de ámbito: verbos COBOL de Micro Focus, procedimiento SAS, DB2 Load Accelerator.
Ejemplos comentados
# 1. Copia básica con terminador (abreviaturas como /INF y /OUTF también valen)
nssort /INFILE /data/ficticio-entrada.dat /OUTFILE /data/ficticio-copia.dat /COPY /END
# 2. A stdout con estadísticas en stderr (útil en pipes)
nssort /INFILE /data/ficticio-entrada.dat /COPY /STATISTICS > /data/ficticio-copia.dat
# 3. Ventana: salta 100 registros y procesa como máximo 1000
nssort /INFILE /data/ficticio-grande.dat /OUTFILE /data/ficticio-muestra.dat /COPY /SKIPRECORD 100 /STOPAFTER 1000
# 4. Solo valida opciones y licencia, sin ejecutar nada
nssort /INFILE /data/ficticio-entrada.dat /OUTFILE /data/ficticio-copia.dat /COPY /NOEXECUTE
# 5. Estilo nssuite con guiones (equivalente al ejemplo 1)
nssort -infile /data/ficticio-entrada.dat -outfile /data/ficticio-copia.dat -copy
# 6. Silencioso para cron (mismo exit code, sin banner ni spinner)
nssort /INFILE /data/ficticio-entrada.dat /OUTFILE /data/ficticio-copia.dat /COPY /SILENT
Códigos de retorno
Según el Reference Guide de SyncSort (cap. 2.1), documentados en el manual:
| Código | Significado |
|---|---|
0 | Completado correctamente (también -version, -license-status, -help, /NOEXECUTE válido) |
1 | Registro fuera de secuencia con /CHECKSEQUENCE (fase P2, aún no implementada) |
100 | Completado con advertencias, salida posiblemente incompleta (fases futuras) |
111 | Terminación prematura: errores, licencia inválida, /INFILE inexistente u opción de roadmap |
Nota honesta: en P0 el binario devuelve 0 o 111; 1 y 100 corresponden a fases P2-P3.
Preguntas frecuentes
¿Puedo usarlo sin licencia? Sí: hay trial automático de 30 días; con -license se usa la firmada y -license-status muestra el estado.
¿Por qué /FIELDS campo1 da error si sale en el ejemplo de ayuda? La línea de uso muestra la sintaxis objetivo compatible SyncSort; en P0 solo /COPY está implementado y las claves de ordenación llegan en la fase P2 (el error indica la fase).
¿/OUTFILE es obligatorio? No: omitido o con -, los registros van a stdout, ideal para pipes (/COPY /STATISTICS > copia.dat).
¿Las builds demo cortan mis datos? Las variantes demo limitan la salida a 50 registros aunque /STOPAFTER pida más; use la build release para producción.