Acciones sobre archivos de texto. [Batch]

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

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

astral_153

#70
:o Hooo ...... gracias por la aplicación...... funciona perfectamente ;-).... Ha lo necesito para organizar artículos vendidos de mayor a menor.. Para  saber cual se vendió mas.. En un mes...y así cada mes.. pude hacerlo en excel pero me interesa aprender sobre batch....

gracias nuevamente..  ;-)
"Toda teoría es gris y sólo es verde el árbol de dorados frutos que es la vida"

labandera

Hola,

A ver si alguien me puede ayudar... Necesito hacer un script que me lea un .txt que contenga numeros de la siguiente forma:

123
4322
3434
3343
3434
.
.
.

Lo que tengo que conseguir es que el script lea solamente los dos últimos números (los de abajo) y me los compare y me devuelva si son iguales o no. Supongo que es sencillo pero soy nulo para esto.

Muchas gracias de antemano

leogtz

#72

C:\>type file.txt
32013
233
25640
22503
9834
30482
25655
1122
7745
3570

C:\>


Código (dos) [Seleccionar]
@echo off
type "file.txt" | findstr /v /n "%RANDOM%jasdkjlakjsdas%RANDOM%"
for /f "tokens=*" %%# in ('type "file.txt" ^| find /v /c ""') do (set "nLines=%%#";)
:: Sacar la última línea:
for /f "tokens=1-2 delims=:" %%a in ('
type "file.txt" ^| findstr /v /n "%RANDOM%!" ^| findstr /r /i "^%nLines%:.*"
') do (
set "compare_1=%%b";
)
echo.&echo Ultima linea :
echo %nLines%: %compare_1%
:: Sacar la penúltima línea:
set /a "nLines-=1"
for /f "tokens=1-2 delims=:" %%a in ('
type "file.txt" ^| findstr /v /n "%RANDOM%!" ^| findstr /r /i "^%nLines%:.*"
') do (
set "compare_2=%%b";
)
echo Penultima linea :
echo %nLines%: %compare_2%
echo.&echo Comparando...
if %compare_1% equ %compare_2% (
echo "Son iguales"
) else (
echo "No son iguales"
)



C:\>code.bat
1:32013
2:233
3:25640
4:22503
5:9834
6:30482
7:25655
8:1122
9:7745
10:3570

Ultima linea :
10: 3570
Penultima linea :
9: 7745

Comparando...
"No son iguales"

C:\>


C:\>code
1:1
2:2
3:3
4:4
5:5
6:6
7:6

Ultima linea :
7: 6
Penultima linea :
6: 6

Comparando...
compare_1=6
compare_2=6
"Son iguales"

C:\>

Código (dos) [Seleccionar]

@echo off
setlocal enabledelayedexpansion
set "contador=0"
:: Mostrar el archivo :
type "file.txt" | findstr /v /n "%RANDOM:~ajshdjkasd!"
for /f "tokens=*" %%_ in ('type "file.txt" ^| find /v /c ""') do (set "nLines=%%_";)
for /f "tokens=* delims=" %%_ in (file.txt) do (
set /a "contador+=1"
set "linea[!contador!]=%%_"
)
set "compare_1=!linea[%nLines%]!";
set /a "nLines-=1"
set "compare_2=!linea[%nLines%]!";
if %compare_1% equ %compare_2% (
echo "Son iguales"
) else (
echo "No son iguales"
)

Dime para qué querías hacer eso.

Código (perl) [Seleccionar]

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

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

labandera

Buenas, gracias por la respuesta, el lunes lo pruebo con calma y ya te cuento...

Lo necesito para monitorizar un error de un stderr.log (remedy). La idea es contar este error y pasarlo a un txt (que me sirve de contador). Cada x tiempo, pueden ser 5 min o 10 min, este contador lo paso a un txt en el que voy añadiendo el número de errores que salen.

Ahí entras tú, si los dos últimos números son iguales es que no se han incrementado los errores, si son distintos es que si, entonces tendría que reiniciar un servicio de otra máquina.

Espero haber sido claro. Muchas gracias, de verdad. Tengo ganas de probarlo, me estaba volviendo majara y no era capaz de sacarlo.


astral_153

#74
!Hola!  :D tengo una pequeña duda y necesito su ayuda....  :huh:   estoy intentando hacer una aplicacion bat que me cierre la cesion tras... (-t xx) XX tiempo.

este codigo funciona perfectamente..

shutdown -r -f -t 30

se reinicia en 30 segundos
pero


shutdown -l -f -t 30

deberia cerrar sesion en 30 segundos.
y la cierra al instante...


necesito su yuda o algo similar que pueda utilizar
preferiblemente que aparezca en una ventana que no pueda que no permita cancelar facilmente.. xD xD xD ...

gracias de antemano.... !Buen Post!  ;-)   ^^,
"Toda teoría es gris y sólo es verde el árbol de dorados frutos que es la vida"

leogtz

A ver, analicemos.

¿Tu duda tiene algo que ver con "Acciones sobre archivos de texto"?

Contéstame.
Código (perl) [Seleccionar]

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

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

astral_153

 ;D la verdad es que no.....    no me abia fijado en ese detalle..... excuse...   :-[ soy un poco nuevo en esto... pense que como se trataba de batch podrian contestar.... bueno si no se puede buscare otro post... xD xD xD

de todas maneras gracias, felicidades este post me han ayudado mucho..  ;-)
"Toda teoría es gris y sólo es verde el árbol de dorados frutos que es la vida"

leogtz

Código (perl) [Seleccionar]

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

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

carlosguay

Cita de: carlosguay en  8 Diciembre 2009, 21:32 PM
Ya que mi problema es de archivos de texto, lo pongo aqui por no abrir otro hilo.

Primero decir que gracias a este hilo, e podido solucionar muchas de las cosas que estoy haciendo com mis archivos, gracias a leo por este aporte.

Vereis tengo un problema que no se como solucionar con este archivo.

 
Citarad 55 6b b9   ad b6 ef ba   05 bc 36 9d   3c 86 43 38
  bf cf 2f bf   4a 8b d7 09   4d 02 41 00   bc c7 88 fd 
  f7 19 be aa   03 c6 18 ee   b3 2c b9 b8   73 89 0b 72 
  06 57 8b c9   77 b3 79 c3   4f 5f db 60   e7 89 bd 55 
  06 90 79 12   f6 84 67 b1   84 c4 dc 22   5b 3a 7f 45 
  ac 5d 14 7e   1d c6 b9 65   8f 6c 37 36| .].~...e.l76

LINEA CON TEXTO


Este archivo, en la parte de la derecha, lleva codigo acssi, que como veis no tengo problema en quitarlo, pero ya veis que en el penultimo renglon ya que la parte de hex no llega hasta el final, pues me deja parte del acssi.

Os pondria de las formas que e intentado quitar la ultima linea y la parte de acsii, pero ya se me an olvidado, xd, siempre consigo esto.


Citar
ad 55 6b b9 ad b6 ef ba 05 bc 36 9d 3c 86 43 38
bf cf 2f bf 4a 8b d7 09 4d 02 41 00 bc c7 88 fd
f7 19 be aa 03 c6 18 ee b3 2c b9 b8 73 89 0b 72
06 57 8b c9 77 b3 79 c3 4f 5f db 60 e7 89 bd 55
06 90 79 12 f6 84 67 b1 84 c4 dc 22 5b 3a 7f 45


Como veis no solo borro la ultima linea y la parte de acsii, sino que tambien borro la linea completa y se seguro que es por |, toma como ultima linea esa y eso es lo que pasa.

Pues si alquien me puede ayudar, me haria un gran favor.

saludos





Hola de nuevo.

Deje el tema por falta de tiempo y ahora lo he vuelto a retomar, si me pudierais hechar una manita, o alguna idea, seria de agradecer.

saludos

leogtz

#79
¿Cuál es el código que intentaste?

Se pudiera trabajar con sed para ahorrar problemas, mira:


C:\>type file.txt
ad 55 6b b9   ad b6 ef ba   05 bc 36 9d   3c 86 43 38
  bf cf 2f bf   4a 8b d7 09   4d 02 41 00   bc c7 88 fd
  f7 19 be aa   03 c6 18 ee   b3 2c b9 b8   73 89 0b 72
  06 57 8b c9   77 b3 79 c3   4f 5f db 60   e7 89 bd 55
  06 90 79 12   f6 84 67 b1   84 c4 dc 22   5b 3a 7f 45
  ac 5d 14 7e   1d c6 b9 65   8f 6c 37 36| .].~...e.l76



C:\>



C:\>type file.txt | sed -e "s/\.//g" -e "s/\]//g" -e "s/~//g" -e "s/|//g"
ad 55 6b b9   ad b6 ef ba   05 bc 36 9d   3c 86 43 38
  bf cf 2f bf   4a 8b d7 09   4d 02 41 00   bc c7 88 fd
  f7 19 be aa   03 c6 18 ee   b3 2c b9 b8   73 89 0b 72
  06 57 8b c9   77 b3 79 c3   4f 5f db 60   e7 89 bd 55
  06 90 79 12   f6 84 67 b1   84 c4 dc 22   5b 3a 7f 45
  ac 5d 14 7e   1d c6 b9 65   8f 6c 37 36 el76



C:\>


Saludos.
Código (perl) [Seleccionar]

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

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