🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: es.comp.os.linux.programacion
Article #1753

Re: Como realizar un pequeño cambio en miles de ficheros de manera sencilla

#1753
From: Carlos
Date: Mon, 25 Jul 2005 22:18
73 lines
3444 bytes
Horacio wrote:
> Hola,
> 
> necesito poder hacer lo siguiente;
> 
> tengo miles de ficheros de texto nombrados secuencialmente, por ejemplo
> 
> resultados_001.txt
> resultados_002.txt
> resultados_003.txt
> .
> .
> .
> resultados_954.txt
> 
> y debo realizar un peque�o cambio en cada uno de ellos, por ejemplo, en la
> l�nea n�mero 5, nada m�s empezar esta, aparece lo siguiente;
> 
> 10,                !n�mero de interacciones
> 
> y lo deseo cambiar a
> 
> -10,               !n�mero de interacciones
> 
> (el peque�o cambio tambi�n podr�a ser sustituir el valor 10 por otro
> cualquiera, por ejemplo 553)
> 
> Mi pregunta es como se puede hacer esto en linux desde la l�nea de comandos
> (ya que no puedo instalar ning�n programa pues soy simple usuario) de manera
> sencilla.

#ESTE SCRIPT NO LO PROBE - CUIDADO, PROBABLEMENTE SEA BUGOSO

for i in `seq -w 1 954`; do
   sed -e '5 s/^[0-9]*/-&/' resultados_$i.txt > $i.tmp
   mv $i.tmp resultados_$i.txt
done

"seq" te da una lista de n�meros desde el 1 al 954. El par�metro -w hace 
que sean de igual anchura, agregando ceros a la izquierda (o sea: de 001 
a 954).

El programa "sed" es <n�mero de l�nea> <acci�n>, o sea: en la l�nea 5, 
reemplazar ("s/.../.../") d�gitos al principio de la l�nea ("^[0-9]*") 
por un "-" y esos mismos d�gitos ("&" repite lo "matcheado").

> P.D. Si me podeis decir lo anterior, como podr�a hacer entonces, lo
> siguiente:
> 
> - tengo un solo fichero llamado salida_001.txt y quiero generar 900 ficheros
> que se llamen salida_002.txt, salida_003.txt, etc., partiendo del fichero
> salida_001.txt
> y que solo se diferencian del primero en la l�nea n�mero 10, donde el
> contenido es:
> 1,                ! valor de la semilla
> de tal manera que para el fichero n�mero i, este valor sea precisamente i,
> es decir, para el fichero salida_055.txt, en la l�nea 10 tendremos;
> 55,              ! valor de la semilla

Con lo anterior ya lo podr�as sacar solo, pero por como tiene la 
complicaci�n que queremos a la vez i con ceros y sin ceros...

#ESTE SCRIPT NO LO PROBE - CUIDADO, PROBABLEMENTE SEA BUGOSO

for i in `seq -w 2 954`; do
   # este primer sed es para sacarle los ceros a $i
   isinceros=$(echo $i | sed -e 's/^0*//')
   # en el segundo sed usamos comillas dobles para que el shell
   # expanda la variable
   sed -e "10 s/^1/$isinceros/" salida_001.txt > salida_$i.txt
done

Espero que te sirva. Saludos.
Technical Details
Message-ID: <dc3o3s$ugd$1@domitilla.aioe.org>
Path: arc1-ca.pugleaf.net!g2news1.google.com!news4.google.com!news.glorb.com!ilaria.aioe.org!aioe.org!not-for-mail
References: <dbldt1$20v$1@unida.um.es>

Show Full Headers
Complete Article Headers
X-Google-Thread: f86c8,a9fb7b436d6506dc
X-Google-Attributes: gidf86c8,public
X-Google-Language: SPANISH,ASCII
Path: arc1-ca.pugleaf.net!g2news1.google.com!news4.google.com!news.glorb.com!ilaria.aioe.org!aioe.org!not-for-mail
From: Carlos <angus@quovadis.com.ar>
Newsgroups: es.comp.os.linux.programacion
Subject: Re: Como realizar un pequeño cambio en miles de ficheros de manera sencilla
Date: Tue, 26 Jul 2005 00:18:21 +0200
Organization: Aioe.org NNTP Server
Lines: 73
Message-ID: <dc3o3s$ugd$1@domitilla.aioe.org>
References: <dbldt1$20v$1@unida.um.es>
NNTP-Posting-Host: puq3HDGyMZXR3pxeUD5GuA.domitilla.aioe.org
Mime-Version: 1.0
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit
X-Complaints-To: abuse@aioe.org
NNTP-Posting-Date: Mon, 25 Jul 2005 22:12:14 +0000 (UTC)
User-Agent: Mozilla Thunderbird 0.8 (X11/20041012)