cómo unir 2 líneas usando un archivo por lotes
Frecuentes
Visto 3,303 equipos
0
Tengo un archivo de texto que tiene un número desconocido de líneas, algunas líneas comienzan con patrones, quiero unir las líneas que comienzan con patrones con la siguiente línea, por ejemplo
name=jimmy
age=19 id=23423 site=www.xxx.com
bla bla
name=katy
age=15 id=234543 site=www.yyy.com
name=ross
age=29 id=54564 site=www.ZZZZ.com
la salida debe ser
name=jimmy age=19 id=23423 site=www.xxx.com
bla bla bla
name=katy age=15 id=234543 site=www.yyy.com
name=ross age=29 id=54564 site=www.ZZZZ.com
entonces el patrón es 'nombre' y debería unirse a la siguiente línea. Pensé en usar sed pero no sé cómo ayudar, por favor.
2 Respuestas
1
Bueno, aquí hay un guión sencillo:
@echo off
setlocal enabledelayedexpansion
set "INPUT_FILE=input.txt"
set "OUTPUT_FILE=output.txt"
set prev=
for /f "tokens=*" %%f in (%INPUT_FILE%) do (
for /f "tokens=1,2 delims==" %%g in ("%%f") do (
if "!prev!" neq "" (
echo !prev! %%f >>%OUTPUT_FILE%
set prev=
) else (
if "%%g" equ "name" (
set prev=%%f
) else (
echo %%f >>%OUTPUT_FILE%
set prev=
)
)
)
)
Respondido 02 Jul 12, 11:07
1
@echo off
setlocal EnableDelayedExpansion
set pattern=name
set patternLen=4
call :ProcessFile < input.txt > output.txt
goto :EOF
:ProcessFile
set line=
set /P line=
if not defined line exit /B
if "!line:~0,%patternLen%!" equ "%pattern%" (
set /P nextLine=
set "line=!line! !nextLine!"
)
echo !line!
goto ProcessFile
El archivo por lotes anterior tiene el problema de que termina en la primera línea vacía del archivo de entrada. Sin embargo, este problema puede solucionarse si es necesario.
Respondido 03 Jul 12, 02:07
gracias, pero no funcionó conmigo, me dio la misma entrada: Leo92
Ops! Sí, tuve un pequeño error (la longitud del patrón es 4, no 3). Tenga en cuenta que para cambiar el patrón por cualquier otra uno, solo tienes que cambiar pattern
y patternLen
instrumentos de cuerda. Este programa no requiere que el patrón esté delimitado con el signo igual, es decir, usted indicó "el patrón es 'nombre'", no "el patrón está delimitado por '='". - Aacini
No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas batch-file or haz tu propia pregunta.
para ser honesto, no intenté nada, tengo un problema al procesar el archivo de texto, así que pensé que unir las dos líneas resolvería el problema, estoy haciendo un bucle, estoy analizando el texto del archivo línea por línea, así que lea una línea luego envíelo para hacer otras cosas, el problema es que quiero fusionar las dos líneas para poder hacerlas en un ciclo, tal vez mi explicación no fue clara :) así que pregúnteme si tiene dudas, por cierto, sed debería hacer eso pero me cuesta usarlo - Leo92