🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: es.comp.os.linux.programacion
9 messages
9 total messages Started by Horacio Wed, 20 Jul 2005 11:52
Como realizar un peque�o cambio en miles de ficheros de manera sencilla
#1732
Author: Horacio
Date: Wed, 20 Jul 2005 11:52
47 lines
2359 bytes
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.

Si me podeis dar la receta exacta mejor.

Gracias.


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
Re: Como realizar un pequeño cambio en miles de ficheros de manera sencilla
#1753
Author: 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.
Re: Como realizar un pequeño cambio en miles de ficheros de manera sencilla
#1755
Author: David Serrano (Hue-Bond)
Date: Tue, 26 Jul 2005 19:15
29 lines
1990 bytes
Carlos, mar20050726@00:18:21(CEST):
>
>    sed -e '5 s/^[0-9]*/-&/' resultados_$i.txt > $i.tmp
>    mv $i.tmp resultados_$i.txt

'sed -i' edita los archivos sin tener que crear un temporal.


> 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*//')

Eso te lo puede hacer bash:

>    # 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

for i in `seq -w 2 954`; do
  sed -e "10 s/^1/${i//0/}/" salida_001.txt > salida_$i.txt
done

El shell quita las barras que están dentro de las llaves antes de que sed
las vea, por tanto a sed no le molestan.


-- 
 David Serrano
Re: Como realizar un pequeño cambio en miles de ficheros de manera sencilla
#1754
Author: Carlos
Date: Tue, 26 Jul 2005 22:18
21 lines
1595 bytes
David Serrano (Hue-Bond) wrote:
>>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*//')
> 
> 
> Eso te lo puede hacer bash:
> 
> 
>>   # 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
> 
> 
> for i in `seq -w 2 954`; do
>   sed -e "10 s/^1/${i//0/}/" salida_001.txt > salida_$i.txt
> done

Cierto, pero debería ser ${i##0} o ${i//#0/}, o "010" quedaría en "1".
-- 
Re: Como realizar un pequeño cambio en miles de ficheros de manera sencilla
#1756
Author: Gonzalo Pérez de Olaguer Córdoba
Date: Tue, 26 Jul 2005 22:55
23 lines
1994 bytes
Hola Carlos <angus@quovadis.com.ar>
el Wed, 27 Jul 2005 00:18:16 +0200 escribiste:

> > for i in `seq -w 2 954`; do
> >   sed -e "10 s/^1/${i//0/}/" salida_001.txt > salida_$i.txt
> > done
> 
> Cierto, pero debería ser ${i##0} o ${i//#0/}, o "010" quedaría en "1".

$ i='00130'; echo ${i##0}
0130
$ i='00130'; echo ${i//0}
13
$ i='00130'; echo ${i//#0}
0130
$ i='00130'; echo $((10#$i + 0))
130

esta es la forma más sencilla que conozco de suprimir ceros iniciales

-- 
Gonzalo Pérez de Olaguer Córdoba <gpoc@iies.es>
PGP key 2861C704 --- F206 5671 6789 425D 111C  1302 214F 1934 2861 C704
Re: Como realizar un pequeño cambio en miles de ficheros de manera sencilla
#1757
Author: David Serrano (Hue-Bond)
Date: Wed, 27 Jul 2005 02:34
15 lines
1716 bytes
Gonzalo P�rez de Olaguer C�rdoba, mié20050727@00:55:34(CEST):
>
>> Cierto, pero debería ser ${i##0} o ${i//#0/}, o "010" quedaría en "1".

Esas fallan cuando hay más de un cero antes de la primera cifra
significativa.


> echo $((10#$i + 0))

Vaya, pues sí que era fácil.


-- 
 David Serrano
Re: Como realizar un � cambio en miles de ficheros de manera sencilla
#1758
Author: Carlos
Date: Wed, 27 Jul 2005 03:20
19 lines
1756 bytes
David Serrano (Hue-Bond) wrote:
> Gonzalo P�rez de Olaguer C�rdoba, mié20050727@00:55:34(CEST):
> 
>>>Cierto, pero debería ser ${i##0} o ${i//#0/}, o "010" quedaría en "1".
> 
> 
> Esas fallan cuando hay más de un cero antes de la primera cifra
> significativa.

Lo repetimos ;). Se ve que no entendí lo de "longest match"... y debería 
probar las cosas :-/.

>>echo $((10#$i + 0))
> 
> 
> Vaya, pues sí que era fácil.

Síp.
-- 
Re: Como realizar un peque?o cambio en miles de ficheros de manera sencilla
#1763
Author: Santiago Romero
Date: Thu, 28 Jul 2005 06:08
14 lines
1692 bytes
El Tue, 26 Jul 2005 19:15:48 +0000 (UTC), David Serrano (Hue-Bond) escribi�:
>>    sed -e '5 s/^[0-9]*/-&/' resultados_$i.txt > $i.tmp
>>    mv $i.tmp resultados_$i.txt
> 
> 'sed -i' edita los archivos sin tener que crear un temporal.

 �Seguro? Pues vaya, gracias por la "cosa-que-no-sab�a" del d�a :)

 saludos.

-- 
Santiago Romero AKA NoP/Compiler (Linux User #74.821) 
http://www.escomposlinux.org/sromero/ y http://www.speccy.org/
sromero(@)gmail.com
Re: Como realizar un peque?o cambio en miles de ficheros de manera sencilla
#1765
Author: J.A. Gutierrez
Date: Thu, 28 Jul 2005 06:54
17 lines
1907 bytes
Santiago Romero <sromero@gmail.comnospam> wrote:
: El Tue, 26 Jul 2005 19:15:48 +0000 (UTC), David Serrano (Hue-Bond) escribi�:
:>>    sed -e '5 s/^[0-9]*/-&/' resultados_$i.txt > $i.tmp
:>>    mv $i.tmp resultados_$i.txt
:> 
:> 'sed -i' edita los archivos sin tener que crear un temporal.

:  �Seguro? Pues vaya, gracias por la "cosa-que-no-sab�a" del d�a :)

	si, pero no es portable; es una extension de la version GNU de
	sed.

-- 
PGP and other useless info at      \
http://webdiis.unizar.es/~spd/      \
finger://daphne.cps.unizar.es/spd    \       Timeo Danaos et dona ferentes
ftp://ivo.cps.unizar.es/pub/          \                         (Virgilio)   
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads