Test Foro de elhacker.net SMF 2.1

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 (dos) [Seleccionar]
@echo off
setlocal ENABLEDELAYEDEXPANSION

set /p file="Archivo: "
set /a i=0
set /a r=0

for /f "tokens=1,2,3" %%a in (!file!) do (
   call :asig %%~b
   for /l %%x in (1;1;!i!) do (     
      call :comp %%x
   )
   if !r! EQU 0 echo %%a %%b %%c
   set /a r=0
)
goto:eof

:asig
set /a i+=1
set array%i%=%1
goto:eof

:comp
if not %1 EQU %i% (
   if !array%1! EQU !array%i%! set /a r=1
)
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 (perl) [Seleccionar]
my %numbers;
while(<>) {
my $line = $_;
my $n;
($n) = $line =~ m/\"([0-9]*)\"/;
print $line if(!$numbers{$n});
$numbers{$n} = 1;
}