Ordenar ficheros en .bat por columnas/ posiciones de un mismo registro

Necesito realizar la ordenación de los registros de un fichero de texto y no encuentro al 100% la solución que necesito. Os detallo para que lo podáis entender:

  • Tengo un fichero que tiene el siguiente formato “xx111xx222xx”.
  • Quiero que esté ordenado solo por las posiciones de la “3” a la “5” y de la “8” a la “10”.
  • Si utilizo el comando “sort”, me ordena el fichero por la columna que le diga en adelante, pero yo solo quiero que esté ordenado por esas dos cadenas de caracteres.

¿Hay alguna forma de hacer esto?

También habría pensado hacer lo siguiente, en el caso de que no haya nada para lo hablando anteriormente:

  • Partiendo del fichero con el siguiente formato “xx111xx222xx”.
  • Obtener la información contenida en las posiciones desde la “3” a la “5” y desde la “8” a la “10”.
  • Con la información anterior, concatenarla en una única variable y dejar al final del registro quedando de la siguiente forma “xx111xx222xx111222”.
  • Ahora sí, utilizar el comando “sort /+12” para que me ordene por esa clave.

¿Me podría indicar alguien cómo realizar esta solución, ya que no soy capaz de codificarla

1 Respuesta

Respuesta
1

Me parece una buena idea la que sugieres de concatenar al final los caracteres que quieres que influyan en la ordenación. Mira a ver si esto te sirve:

@echo off
Setlocal EnableDelayedExpansion
del /q temp.txt
for /f "tokens=* delims=" %%i in (alvaro.txt) do (
set v=%%i
set v=!v!!v:~2,3!!v:~7,3!
echo !v!>>temp.txt
)
sort /+12 temp.txt /O tmp.txt
del /q temp.txt
for /f "tokens=* delims=" %%i in (tmp.txt) do (
set v=%%i
set v=!v:~0,12!
Echo !v!>>temp.txt
)

ALVARO.TXT sería el archivo de origen y en TEMP.TXT se quedarían las cadenas ordenadas. Mira a ver si te vale y si hay algo que corregir me lo dices y lo miramos.

Muchas muchas Gracias...!!! 

Es justo lo que necesitaba pero, en rendimiento, deja algo que desear porque va lento la verdad.

¿Entiendo que no se podría optimizar este proceso verdad?

De todas formas, me quedo con esta solución porque es una maravilla.!!!

Gracias de nuevo.

A lo mejor se pueden usar opciones del comando SORT que agilicen el tratamiento (por ejemplo aumentar la memoria dedicada al proceso). No he usado ese comando nunca pero puede ser una buena ocasión para hacerlo ¿De cuántos registros estamos hablando (lo digo por simularlo en mi ordenador para ver si consigo mejorar el rendimiento)?

Por lo poco que sé de powershell intuyo que esa shell de Windows, relativamente nueva pero poco usada creo yo, puede ser más eficaz.

No me has comentado nada sobre el número de registros ni sobre las posibles mejoras del SORT. Si crees que vale la pena probarlo dime algo.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas