Acciones sobre archivos de texto. [Batch]

Iniciado por leogtz, 24 Enero 2009, 00:30 AM

0 Miembros y 2 Visitantes están viendo este tema.

darth1024

Gracias por tu respuesta Leo.

basicamente se trata de crear un nuevo txt a partir del archivo original. Este original contiene las "sesiones" de varios dias y yo por mi cuenta voy a filtrar que dia quiero generar.

Ejm:


ORIGINAL (veras que vienen 3 grupos de sesiones dos del dia 05/08 y una del 06/08)

Session : 2010/08/06-8
                                                                             
ObjectName    : fasactf.fasa.com.pe:/oracle/ora_bck '/oracle/ora_bck'
ObjectType    : FileSystem
DiskAgentID   : 1281097807
Object Status : Completed
=====================================================
drwxr-x---        256  04/08/2010 23:30:04 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_03/
drwxr-x---        256  05/08/2010 23:30:03 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_04/

Session : 2010/08/05-20
                                                                             
ObjectName    : fasactf.fasa.com.pe:/oracle/ora_bck '/oracle/ora_bck'
ObjectType    : FileSystem
DiskAgentID   : 1281051007
Object Status : Completed
=====================================================-rw-r----- 1214829568  05/08/2010 18:00:56 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/
-rw-r----- 1214404608  05/08/2010 18:00:59 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/

Session : 2010/08/05-7
                                                                             
ObjectName    : fasactf.fasa.com.pe:/oracle/ora_bck '/oracle/ora_bck'
ObjectType    : FileSystem
DiskAgentID   : 1281011407
Object Status : Completed
=====================================================-rw-r----- 1216808448  05/08/2010 07:06:08 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/
-rw-r----- 1213480960  05/08/2010 07:06:14 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/


RESULTADO (por ejm. solo quiero quedarme con los dos del 05/08)

Session : 2010/08/05-20
                                                                             
ObjectName    : fasactf.fasa.com.pe:/oracle/ora_bck '/oracle/ora_bck'
ObjectType    : FileSystem
DiskAgentID   : 1281051007
Object Status : Completed
=====================================================-rw-r----- 1214829568  05/08/2010 18:00:56 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/
-rw-r----- 1214404608  05/08/2010 18:00:59 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/

Session : 2010/08/05-7
                                                                             
ObjectName    : fasactf.fasa.com.pe:/oracle/ora_bck '/oracle/ora_bck'
ObjectType    : FileSystem
DiskAgentID   : 1281011407
Object Status : Completed
=====================================================-rw-r----- 1216808448  05/08/2010 07:06:08 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/
-rw-r----- 1213480960  05/08/2010 07:06:14 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/


Entiendes?, solo deseo las tramas pertenecientes al dia (sesion) que escogi (que vendria a ser la cabecera de cada pequeña trama).

Gracias por tu ayuda, Leo.


patorejo

#91
muy buena informacion t la agradezco,debio costarte mucho trabajo pero qdo excelente ;-) ;-) ;-) ;-) ;-) ;-) ;-) ;-)

lo que pasa es que no me qda muy claro el codigo para reemplazar una palabra de un txt

segun yo mas o menos va a asi
@echo off
(
echo 2<<<------------NUMERO DE LINEA A MODIFICAR
echo Gutierrez<<<<---------PALABRA Q SE VA A PONER EN VEZ DEL Q ESTABA EN LA SEGUNDA LINEA

) | edlin /b c:\TEXTO.txt<<<----------------RUTA DEL ARCHIVO QUE SE VA A MODIFICAR


pero no me funciona no me cambia la palabra,queda igual,es q quiero este codigo para ver si es posible hacer,por ejemplo si tengo en un texto por llamarlo "detelle.txt" y dentro de este txt tengo una linea que contiene  "ip=192.168.12.1"

lo q quiero saber es si es q se puede  cojer el valor de esa ip y ponerla en una variable por ejemplo qdaria "ip=a"(claro esta que "a=192.168.12.1"),y dicha variable  "a"  tome el valor  de otro txt llamado ips.txt.



txt 1--->detalle.txt
contiene:

codigo:255
registro:2333
nombre pc:25555
ip:192.168.12.1<<<----------------hacer que "ip=a" y que  "a" tome los valores del otro txt llamado "ips.txt" aleatoriamente


txt 2---->ips.txt
contiene:

125.251.32.1
145.21.23.5
147.28.6.2
123.214.36.4
125.253.24.26
12.36.25.58
89.25.41.65
41.25.36.41


:-X :-X :-X no se sera posible hacer eso pero creo q con los conocimientos q ya tiens me podes guiar un poco a como hacerlo,de anemano t agradezco por la ayuda q ya me has brindado

darth1024

Estimado Leo, no quiero molestarte pero tuviste oportunidad de revisar mi anterior mensaje, donde describia el formato final deseado?


Samuel.

leogtz

Cita de: darth1024 en 19 Agosto 2010, 12:18 PM
Estimado Leo, no quiero molestarte pero tuviste oportunidad de revisar mi anterior mensaje, donde describia el formato final deseado?


Samuel.

Sí, pero estaba ocupado y se me olvidó, mira lo resolví así.

Use sed para Windows, debes descargarlo, es gratis y te será  de utilidad.

Tomando el ejemplo de archivo que dejaste, este:


Session : 2010/08/06-8
                                                                             
ObjectName    : fasactf.fasa.com.pe:/oracle/ora_bck '/oracle/ora_bck'
ObjectType    : FileSystem
DiskAgentID   : 1281097807
Object Status : Completed
=====================================================
drwxr-x---        256  04/08/2010 23:30:04 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_03/
drwxr-x---        256  05/08/2010 23:30:03 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_04/

Session : 2010/08/05-20
                                                                             
ObjectName    : fasactf.fasa.com.pe:/oracle/ora_bck '/oracle/ora_bck'
ObjectType    : FileSystem
DiskAgentID   : 1281051007
Object Status : Completed
=====================================================-rw-r----- 1214829568  05/08/2010 18:00:56 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/
-rw-r----- 1214404608  05/08/2010 18:00:59 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/

Session : 2010/08/05-7
                                                                             
ObjectName    : fasactf.fasa.com.pe:/oracle/ora_bck '/oracle/ora_bck'
ObjectType    : FileSystem
DiskAgentID   : 1281011407
Object Status : Completed
=====================================================-rw-r----- 1216808448  05/08/2010 07:06:08 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/
-rw-r----- 1213480960  05/08/2010 07:06:14 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/


Y el siguiente código:
Código (dos) [Seleccionar]

@echo off
echo Sesiones en "file.txt" :
echo.
for /f "tokens=2* delims=/" %%a in ('type "file.txt" ^| findstr "^Sess.*"') do (
echo %%a/%%b
)

:menu
echo.
set /p "choice=Escriba el tipo de sesión que desea en el formato 08/05 : ";
if not defined choice (goto:menu)

rem Muestreo de datos:
set "choice=%choice:/=\/%"
rem Puedes usar redirección para obtener la salida del siguiente comando:
type "file.txt" | sed -n "/^Session : 2010\/\%choice%.*$/,/^$/p"
        set /p "=";
exit /b 0



Una prueba de ejecución:


C:\>code.bat
Sesiones en "file.txt" :

08/06-8
08/05-20
08/05-7

Escriba el tipo de sesi¾n que desea en el formato 08/05 : 08/05
Session : 2010/08/05-20

ObjectName    : fasactf.fasa.com.pe:/oracle/ora_bck '/oracle/ora_bck'
ObjectType    : FileSystem
DiskAgentID   : 1281051007
Object Status : Completed
=====================================================-rw-r----- 1214829568  05/08/2010 18:00:56 /
oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/
-rw-r----- 1214404608  05/08/2010 18:00:59 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/
2010_08_05/

Session : 2010/08/05-7

ObjectName    : fasactf.fasa.com.pe:/oracle/ora_bck '/oracle/ora_bck'
ObjectType    : FileSystem
DiskAgentID   : 1281011407
Object Status : Completed
=====================================================-rw-r----- 1216808448  05/08/2010 07:06:08 /
oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/2010_08_05/
-rw-r----- 1213480960  05/08/2010 07:06:14 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/
2010_08_05/


C:\>code
Sesiones en "file.txt" :

08/06-8
08/05-20
08/05-7

Escriba el tipo de sesi¾n que desea en el formato 08/05 : 08/06
Session : 2010/08/06-8

ObjectName    : fasactf.fasa.com.pe:/oracle/ora_bck '/oracle/ora_bck'
ObjectType    : FileSystem
DiskAgentID   : 1281097807
Object Status : Completed
=====================================================
drwxr-x---        256  04/08/2010 23:30:04 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/
2010_08_03/
drwxr-x---        256  05/08/2010 23:30:03 /oracle/ora_bck/ctf/flash_recovery_area/CTF/backupset/
2010_08_04/

C:\>


Saludos.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

WiZZard


Excelente manual, se merece chincheta!!   ;-)
"Aprender sin pensar es inútil. Pensar sin aprender, peligroso."
Confucio

mi BLOG

"El éxito es aprender a ir de fracaso en fracaso sin perder el entusiasmo."
Winston Churchill

darth1024

Estimado Leo, en verdad es Ud. un Genio!!, muchas gracias por tu apoyo.

Voy a buscar el "sed" para windows y lo pruebo pero a simple vista se ve formidable tu solución. :D

Gracias. ;-)


Darth1024

Hekaly

Buenas. Tengo una duda para extraer cierta información de un archivo .txt pero no me sale y ya he probado de mil maneras.

Una de las parte que tiene el script que estoy creando es para sacar automaticamente el número de paginas que tiene un capitulo de un manga. Bien ya he encontrado en que parte está del código pero no consigo extraerlo en una variable.

Las herramientas que uso son las versiones Windows de "lynx" (para guardar el codigo de la web en un txt) y "cut" para extraer trozos de un string.

Bien cuando uso lynx para guarda la web se guarda esto en el txt.

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"><html<head><meta http-equiv="Content-Type" content="
text/html;charset=utf-8"/><title>Swot 8 (HQ) &mdash; IchiNoFansub &mdash; submanga.com</title><base href="http://submanga.com/"/><link rel="shortcut icon"
href="http://submanga.com/static/images/favicon.gif"/></head><frameset style="background:#000" width="100%" height="100%" frameborder="0" framespacing="0"
noresize rows="*"><frame style="background:#000;" width="auto" height="auto" id="manga" scrolling="auto" frameborder="0" framespacing="0" src="
./leer?mode=abajo&n=1&m=20&c=8&s=Swot&f=IchiNoFansub&id=85963"/></frameset></html>


* Todo es en una linea, lo he partido para que la linea no salga de los bordes del foro.

El numero de paginas que tiene un capitulo se encuntra al final del archivo.

./leer?mode=abajo&n=1&m=20&c=8&s=Swot&f=IchiNoFansub&id=85963"

El numero de paginas de cualquier capitulo esta donde pone "20" y es lo que quiero extraer para guardarlo en una variable.

Hasta aqui todo perfecto pero he probado con cut -c columnas > txt, cut -d -f > txt, pero nada, no me muestra mas que style="background:#000;"

He estado investigando y si tengo el archivo en rtf y lo guardo como unicode si he podido extraerlo, pero no se guardar archivos unicode desde la terminal, he probado con "cmd /u /c lynx ....... > archivo.txt" y nada.

Sabriais alguna forma de extraer el numero, hay algun parametro de find o findstr que simule cut -c y extraer el número.

Muchas gracias por la respuesta.

leogtz

Eso se hace facilmente con FOR, cuando tenga tiempo doy una respuesta.
Código (perl) [Seleccionar]

(( 1 / 0 )) &> /dev/null || {
echo -e "stderrrrrrrrrrrrrrrrrrr";
}

http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com

Hekaly

Muchas gracias Leo, esperaré con ansias la respuesta.

flony

#99
leo una opcion seria con extraccion de caracteres siempre que tenga la misma longitud y los archivos de manga no supere los 100  :laugh:
<"manga.txt" set /p "a="
set "a"
set var=%a:~630,2%
echo %var%
pause

si un problema no tiene solucion entonces no es un problema...es algo inevitable