elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Solucionado][Duda] eliminar doble palabra incluyendo la primera en un texto...
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Solucionado][Duda] eliminar doble palabra incluyendo la primera en un texto...  (Leído 8,013 veces)
.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
[Solucionado][Duda] eliminar doble palabra incluyendo la primera en un texto...
« en: 2 Enero 2012, 01:22 am »

Hola a todos, bueno estoy buscando la forma de poder eliminar las palabras repetidas de un .txt

buscando por Internet encontré el siguiente código que funciona casi a la perfección:
Código
  1. echo off
  2.  
  3. set /a x=1
  4.  
  5. for /f "tokens=1 delims=" %%a in (token4.txt) do (
  6. rem echo %%a
  7. echo %%a > %%a.test
  8. )
  9.  
  10. for /f "tokens=* delims= " %%a in ('dir /B "*.test"') do (
  11. echo %%a>>semifinish.txt
  12. )
  13.  
  14. echo  > finish.txt
  15.  
  16. for /f "tokens=1,2 delims=." %%a in (semifinish.txt) do (
  17.  
  18. echo %%a >>finish.txt
  19. rem echo %%b
  20.  
  21. rem echo %%p
  22.  
  23. )
  24.  
  25. for /f "tokens=* delims= " %%a in ('dir /B "*.test"') do (
  26. del "%%a"
  27. )
  28.  
  29. del semifinish.txt

Si en token4.txt tiene:
Código:
1
1
2
3
4
4
5
6

me queda un finish.txt de esta manera:
Código:
1
2
3
4
5
6

Pero me gustaría hacerle una modificación para que borrara los dos números que se repitieron es decir que usando el mismo ejemplo anterior me devolviera:
Código:
2
3
5
6

En palabras simples borrar ambas palabras o números repetidos.

Espero su ayuda, muchas gracias


« Última modificación: 3 Enero 2012, 06:38 am por Leo Gutiérrez. » En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.866



Ver Perfil
Re: [Duda] eliminar doble palabra incluyendo la primera en un texto...
« Respuesta #1 en: 2 Enero 2012, 03:41 am »

¿Es totalmente necesario hacerlo con un script?

Podrías ahorrarte mucho trabajo con el comando:
Código:
Uniq -U Token4.txt > Finish.txt

Código:
uniq --help

Usage: uniq [OPTION]... [INPUT [OUTPUT]]
Discard all but one of successive identical lines from INPUT (or
standard input), writing to OUTPUT (or standard output).

Mandatory arguments to long options are mandatory for short options too.
  -c, --count           prefix lines by the number of occurrences
  -d, --repeated        only print duplicate lines
  -D, --all-repeated[=delimit-method] print all duplicate lines
                        delimit-method={none(default),prepend,separate}
                        Delimiting is done with blank lines.
  -f, --skip-fields=N   avoid comparing the first N fields
  -i, --ignore-case     ignore differences in case when comparing
  -s, --skip-chars=N    avoid comparing the first N characters
  -u, --unique          only print unique lines
  -w, --check-chars=N   compare no more than N characters in lines
      --help     display this help and exit
      --version  output version information and exit

EDITO:
http://gnuwin32.sourceforge.net/downlinks/coreutils-bin-zip.php




« Última modificación: 2 Enero 2012, 06:11 am por EleKtro H@cker » En línea



.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: [Duda] eliminar doble palabra incluyendo la primera en un texto...
« Respuesta #2 en: 2 Enero 2012, 15:32 pm »

¿Es totalmente necesario hacerlo con un script?

Podrías ahorrarte mucho trabajo con el comando:
Código:
Uniq -U Token4.txt > Finish.txt

Código:
uniq --help

Usage: uniq [OPTION]... [INPUT [OUTPUT]]
Discard all but one of successive identical lines from INPUT (or
standard input), writing to OUTPUT (or standard output).

Mandatory arguments to long options are mandatory for short options too.
  -c, --count           prefix lines by the number of occurrences
  -d, --repeated        only print duplicate lines
  -D, --all-repeated[=delimit-method] print all duplicate lines
                        delimit-method={none(default),prepend,separate}
                        Delimiting is done with blank lines.
  -f, --skip-fields=N   avoid comparing the first N fields
  -i, --ignore-case     ignore differences in case when comparing
  -s, --skip-chars=N    avoid comparing the first N characters
  -u, --unique          only print unique lines
  -w, --check-chars=N   compare no more than N characters in lines
      --help     display this help and exit
      --version  output version information and exit

EDITO:
http://gnuwin32.sourceforge.net/downlinks/coreutils-bin-zip.php




No necesariamente, la idea es que de la forma que sea cumpla su objetivo, probaré el programa, muchísimas gracias :D
En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: [Duda] eliminar doble palabra incluyendo la primera en un texto...
« Respuesta #3 en: 2 Enero 2012, 16:17 pm »

Hola, sabes lo probé y funciona bien pero me surge el siguiente problema:

si los números son:

Código:
1
1
2
3
2
4

solo borra 1, el 2 no es borrado, creo que solo compara con la línea que está abajo
En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: [Duda] eliminar doble palabra incluyendo la primera en un texto...
« Respuesta #4 en: 3 Enero 2012, 03:12 am »

Disculpa que reabra esto, pero existe alguno parecido que deje guardado la palabra repetida y que distinga entre mayúsculas y minúsculas? saludos
En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: [Duda] eliminar doble palabra incluyendo la primera en un texto...
« Respuesta #5 en: 3 Enero 2012, 04:51 am »

Esto me funciona:

Código
  1. @echo off
  2. setlocal enabledelayedexpansion
  3. for /f %%_ in (a.txt) do (type "b.txt" | findstr /r "^%%_$" > nul 2>&1 && (for /f "tokens=*" %%# in ('type "b.txt" ^| findstr /r /i "^%%_$" ^| find /v /c ""') do (if %%# equ 1 (echo %%_ >> final.txt))))

Código:
C:\Users\leo\batch>type a.txt
1
1
2
3
4
4
5
6

C:\Users\leo\batch>type b.txt
1
1
2
3
4
4
5
6

C:\Users\leo\batch>code

C:\Users\leo\batch>type final.txt
2
3
5
6

C:\Users\leo\batch>

PD: Varias sentencias en una sola línea es mala ingeniería de software, no hagan lo que hice.
« Última modificación: 3 Enero 2012, 05:01 am por Leo Gutiérrez. » En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.866



Ver Perfil
Re: [Duda] eliminar doble palabra incluyendo la primera en un texto...
« Respuesta #6 en: 3 Enero 2012, 05:03 am »

EDITO: Vale acabo de ver el code de Leo xD Genial ese funciona.

Hola, sabes lo probé y funciona bien pero me surge el siguiente problema:

si los números son:

Código:
1
1
2
3
2
4

solo borra 1, el 2 no es borrado, creo que solo compara con la línea que está abajo

Pues vaya :/ Entonces no funciona demasiado bien...



Ayer probé a intentar hacer un script para ti, Conseguí con un FOR almacenar en una variable los strings repetidos y en otra sin los repetidos, de esta forma:

Código:
Words=;1;2;3;4;5;6
Repeated=;1;4

Pero me bloqueé en como hacer otro for para borrar los strings repetidos, de la variable "words" (Es lo que tu quieres xD) (Sin usar SED.exe), y también en como pasar toda esa cadena reemplazando el signo ; por saltos de linea para que el nuevo archivo de texto quede escrito de arriba a abajo así...

Código:
2
3
5
6

...Así que dejé de hacerlo XDDD  :-(


Aqui dejo el code por si alguien se anima a acabarlo o le puedes sacar algún uso :/...

Saludos


Código
  1. @echo off
  2. Set File=Test.txt
  3.  
  4. For /F "tokens=*" %%_ in ('Type "%File%"') do (Call :Repeat %%_)
  5.  
  6. Echo Palabras:  %Words%
  7. Echo Repetidas: %repeated%
  8.  
  9. :Repeat
  10. Echo "%Words%" | Find "%*" >nul
  11. If %ErrorLevel% Equ 0 (Set Repeated=%Repeated%;%*) ELSE (Set Words=%Words%;%*)
  12. Goto :EOF

« Última modificación: 3 Enero 2012, 05:07 am por EleKtro H@cker » En línea



leogtz
. . .. ... ..... ........ ............. .....................
Colaborador
***
Desconectado Desconectado

Mensajes: 3.069


/^$/


Ver Perfil WWW
Re: [Duda] eliminar doble palabra incluyendo la primera en un texto...
« Respuesta #7 en: 3 Enero 2012, 05:05 am »

Si ya sabes cuáles se repiten, aplicale un "find /v "...." a lo que sabes que se repite para eliminarlo del archivo original.

Código:
C:\Users\leo\batch>type a.txt
1
1
2
3
4
4
5
6

C:\Users\leo\batch>type a.txt | find /v "1" | find /v "4"
2
3
5
6

C:\Users\leo\batch>
En línea

Código
  1. (( 1 / 0 )) &> /dev/null || {
  2. echo -e "stderrrrrrrrrrrrrrrrrrr";
  3. }
  4.  
http://leonardogtzr.wordpress.com/
leogutierrezramirez@gmail.com
.:UND3R:.
Moderador Global
***
Desconectado Desconectado

Mensajes: 3.118


Ingeniería inversa / MASM


Ver Perfil WWW
Re: [Duda] eliminar doble palabra incluyendo la primera en un texto...
« Respuesta #8 en: 3 Enero 2012, 06:12 am »

Excelente, muchísimas gracias a ambos me ha servido  ;-)

de verdad muchas gracias :D
En línea


Solicitudes de crack, keygen, serial solo a través de mensajes privados (PM)
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines