Tema destacado: Suscripción al boletín mensual de elhacker.net
Autor
|
Tema: [Solucionado][Duda] eliminar doble palabra incluyendo la primera en un texto... (Leído 1,171 veces)
|
.:UND3R:.
Desconectado
Mensajes: 1.960
Ingeniería inversa
|
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: echo off set /a x=1 for /f "tokens=1 delims=" %%a in (token4.txt) do ( rem echo %%a echo %%a > %%a.test ) for /f "tokens=* delims= " %%a in ('dir /B "*.test"') do ( echo %%a>>semifinish.txt ) echo > finish.txt for /f "tokens=1,2 delims=." %%a in (semifinish.txt) do ( echo %%a >>finish.txt rem echo %%b rem echo %%p ) for /f "tokens=* delims= " %%a in ('dir /B "*.test"') do ( del "%%a" ) del semifinish.txt Si en token4.txt tiene: 1 1 2 3 4 4 5 6 me queda un finish.txt de esta manera: 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: 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 por Leo Gutiérrez. »
|
En línea
|
|
|
|
|
EleKtro H@cker
|
¿Es totalmente necesario hacerlo con un script? Podrías ahorrarte mucho trabajo con el comando: Uniq -U Token4.txt > Finish.txt 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 por EleKtro H@cker »
|
En línea
|
Siempre habrá alguien más ignorante que uno mismo, Como por ejemplo el nuevo presidente de la SGAE: "La banda ancha es totalmente innecesaria para navegar convencionalmente, Solo sirve para descargar megas y megas grandisimos, Y tal." PD: Volviendo a la era de los 56 k.
|
|
|
.:UND3R:.
Desconectado
Mensajes: 1.960
Ingeniería inversa
|
¿Es totalmente necesario hacerlo con un script? Podrías ahorrarte mucho trabajo con el comando: Uniq -U Token4.txt > Finish.txt 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.phpNo necesariamente, la idea es que de la forma que sea cumpla su objetivo, probaré el programa, muchísimas gracias 
|
|
|
|
|
En línea
|
|
|
|
.:UND3R:.
Desconectado
Mensajes: 1.960
Ingeniería inversa
|
Hola, sabes lo probé y funciona bien pero me surge el siguiente problema: si los números son: 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
|
|
|
|
.:UND3R:.
Desconectado
Mensajes: 1.960
Ingeniería inversa
|
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
|
|
|
|
Leo Gutiérrez.
. . .. ... ..... ........ ............. .....................
Moderador
 
Desconectado
Mensajes: 2.968
/^$/
|
Esto me funciona: @echo off setlocal enabledelayedexpansion 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:\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 por Leo Gutiérrez. »
|
En línea
|
|
|
|
|
EleKtro H@cker
|
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: 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: 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í... 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 @echo off Set File=Test.txt For /F "tokens=*" %%_ in ('Type "%File%"') do (Call :Repeat %%_) Echo Palabras: %Words% Echo Repetidas: %repeated% Pause :Repeat Echo "%Words%" | Find "%*" >nul If %ErrorLevel% Equ 0 (Set Repeated=%Repeated%;%*) ELSE (Set Words=%Words%;%*) Goto :EOF 
|
|
|
|
« Última modificación: 3 Enero 2012, 05:07 por EleKtro H@cker »
|
En línea
|
Siempre habrá alguien más ignorante que uno mismo, Como por ejemplo el nuevo presidente de la SGAE: "La banda ancha es totalmente innecesaria para navegar convencionalmente, Solo sirve para descargar megas y megas grandisimos, Y tal." PD: Volviendo a la era de los 56 k.
|
|
|
Leo Gutiérrez.
. . .. ... ..... ........ ............. .....................
Moderador
 
Desconectado
Mensajes: 2.968
/^$/
|
Si ya sabes cuáles se repiten, aplicale un "find /v "...." a lo que sabes que se repite para eliminarlo del archivo original. 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
|
|
|
|
.:UND3R:.
Desconectado
Mensajes: 1.960
Ingeniería inversa
|
Excelente, muchísimas gracias a ambos me ha servido de verdad muchas gracias 
|
|
|
|
|
En línea
|
|
|
|
|
| Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Eliminar Palabra DEMO en Programa
« 1 2 3 4 »
Ingeniería Inversa
|
guruangel
|
47
|
15,559
|
1 Abril 2012, 07:53
por slork
|
|
|
[DUDA] Imprimir texto X veces - Visual Basic [SOLUCIONADO]
Programación Visual Basic
|
Siquillote
|
2
|
1,317
|
2 Enero 2011, 00:01
por Siquillote
|
|
|
Codigo para colocar mayuscula en a primera letra de cada palabra de un texto....
Programación General
|
infolestk
|
4
|
3,076
|
1 Febrero 2011, 23:10
por Littlehorse
|
|
|
(SOLUCIONADO) [ Batch] Duda ¿Como ver un texto ANSI correctamente en el CMD?
Scripting
|
pitoloko
|
6
|
2,045
|
26 Marzo 2011, 13:41
por Francisasdasd
|
|
|
[Duda] Buscar una palabra en un texto y reemplazar lo siguiente...
Programación Visual Basic
|
Hurubnar
|
4
|
1,477
|
31 Agosto 2011, 19:40
por Hurubnar
|
|