Foro de elhacker.net

Programación => Scripting => Mensaje iniciado por: guidosl en 15 Mayo 2010, 03:09 am



Título: ayuda con scritp en linux o batch
Publicado por: guidosl en 15 Mayo 2010, 03:09 am
gente tengo un xxx.xml con lineas

cada linea contiene bloques que podriamos ponerle como delimitardor comillas(cada bolque de texto esta encerrado entre comillas)

lo que necesito es ahcer un script q me recorra el archivo y me compare todos los numeros del bolque 6 y elimine los repetidos

osea en todas las lineas, en el bloque 6 hay un numero quiero q compare cada uno con cada bloque 6 de cada linea y si encuentra repetidos que elimine las lienas completas, PERO conservado uno de esos blokes repetidos

ejemplo con 3 bloques (comparando bloque 2):


"asdhgjg" "123" "sdfjhsdfl"
"asdhgjg" "321" "sdfjhsdfl"
"asdhgjg" "456" "sdfjhsdfl"
"asdhgjg" "654" "sdfjhsdfl"
"asdhgjg" "123" "sdfjhsdfl"
"asdhgjg" "789" "sdfjhsdfl"
"asdhgjg" "987" "sdfjhsdfl"
"asdhgjg" "123" "sdfjhsdfl"
"asdhgjg" "000" "sdfjhsdfl"
"asdhgjg" "123" "sdfjhsdfl"
"asdhgjg" "111" "sdfjhsdfl"
"asdhgjg" "123" "sdfjhsdfl"


esta repetido el "123"

quiero q se eliminen todas las lineas completas q contengan el "123" solamente conservando una de ellas...quedando:


"asdhgjg" "123" "sdfjhsdfl"
"asdhgjg" "321" "sdfjhsdfl"
"asdhgjg" "456" "sdfjhsdfl"
"asdhgjg" "654" "sdfjhsdfl"
"asdhgjg" "789" "sdfjhsdfl"
"asdhgjg" "987" "sdfjhsdfl"
"asdhgjg" "000" "sdfjhsdfl"
"asdhgjg" "111" "sdfjhsdfl"


pense en hacerlo con un cut pero la verdad que estoy medio perdido...quiza para algunos es una boludes hacerlo


desde ya muchas gracias


Título: Re: ayuda con scritp en linux o batch
Publicado por: cgvwzq en 15 Mayo 2010, 15:13 pm
Aquí he hecho algo en batch... =)

Código
  1. @echo off
  2. setlocal ENABLEDELAYEDEXPANSION
  3.  
  4. set /p file="Archivo: "
  5. set /a i=0
  6. set /a r=0
  7.  
  8. for /f "tokens=1,2,3" %%a in (!file!) do (
  9.   call :asig %%~b
  10.   for /l %%x in (1;1;!i!) do (      
  11.      call :comp %%x
  12.   )
  13.   if !r! EQU 0 echo %%a %%b %%c
  14.   set /a r=0
  15. )
  16. goto:eof
  17.  
  18. :asig
  19. set /a i+=1
  20. set array%i%=%1
  21. goto:eof
  22.  
  23. :comp
  24. if not %1 EQU %i% (
  25.   if !array% style="color: #448888;">1! EQU !array% style="color: #448888;">i%! set /a r=1
  26. )
  27. goto:eof

Seguro que es mejorable, pero funciona...


Título: Re: ayuda con scritp en linux o batch
Publicado por: biribau en 15 Mayo 2010, 15:41 pm
En Perl:
Código
  1. my %numbers;
  2. while(<>) {
  3. my $line = $_;
  4. my $n;
  5. ($n) = $line =~ m/\"([0-9]*)\"/;
  6. print $line if(!$numbers{$n});
  7. $numbers{$n} = 1;
  8. }