Tengo un archivo de interfaz, por ejemplo, llamado RawData.txt que contiene diferentes regiones de datos que pueden variar desde unos pocos miles de líneas hasta más de 100,000 líneas de datos.
Hay una mezcla de líneas que contienen por ejemplo
01 00000000000000000000000000000198699 XYZ
que tienen valores int distintos de 0 incluidos que a veces necesitan ser reemplazados por
01 00000000000000000000000000000000000 XYZ
pero debido a la variabilidad del valor int entre los marcadores 01 y XYZ, buscar y reemplazar directamente en un editor de texto no funcionará.
La parte que necesito manipular está estructurada de la siguiente manera:
01 00000000000000000000000000000198699 XYZ
02 157
01 00000000000000000000000000000007749 XYZ
02 158
01 00000000000000000000000000000183279 XYZ
02 163
01 00000000000000000000000000000007749 XYZ
02 165
01 00000000000000000000000000000000000 XYZ
02 175
Idealmente, estoy buscando armar un archivo por lotes que busque cualquier línea en el archivo .txt que comience con el marcador de registro 01 y reemplace la línea con:
01 00000000000000000000000000000000000 XYZ
Supongo que el enfoque más directo es encontrar cualquier línea que comience con el marcador de registro 01 y reemplazar toda la línea, ya que la longitud debe ser idéntica después de que se realicen las modificaciones a los datos existentes.
La mayoría de los ejemplos que he encontrado están relacionados con el reemplazo de una cadena por otra como en el ejemplo aquí
y
pero no puedo modificar para lograr lo que necesito de un archivo por lotes.
Cualquier consejo es apreciado.
fuente
01
los000...
campos. ¿Cual es correcta? ¿Puede ocurrir? ¿La cadena de reemplazo requiere el mismo número de espacios?[0-9]*
y verá que coincidirá con esa cadena de dígitos. Pero un archivo por lotes o cualquier idioma también debería poder hacer lo que quiera.@for /f "tokens=1,2 delims= " %%f in (a.a) do @IF "%%f"=="01" (echo 01 00000000000000000000000000000000000 XYZ) ELSE IF NOT "%%f"=="01" ECHO %%f %%g
abc[multiple spaces]def
y trata a abc como el primer token y def como el segundo. Por lo tanto, cuenta ya sea un espacio o una secuencia de espacios contiguos, para ser un delimitador. Vale la pena usar ejemplos simples si quieres entenderlo mejor.Respuestas:
Esto podría ser lo que quieres
¡Un archivo por lotes se ocupó de esto sorprendentemente bien!
¿Dónde
a.a
está tu archivo de datos?blahblah.bat es un archivo por lotes de una línea
ejecutar el archivo por lotes
Eso pareció eliminar las líneas en blanco, puede haber una forma de evitarlo con el lote, pero otra forma, además del lote, es usar sed.
Por supuesto, podría agregar
>b.b
para redirigir esa salida a un nuevo archivo, por lo que podría hacer,sed -r "......." a.a > b.b
es decirsed -r "s/^01.*/01 00000000000000000000000000000000000 XYZ/" a.a > b.b
fuente
Una forma de analizar el archivo y mantener las líneas vacías es dejar que las líneas se numeren a través de findtr
(para que no estén vacías para el bucle for / f)
y descartar el número después.
fuente