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
Author: Horacio
Date: Wed, 20 Jul 2005 11:52
Date: Wed, 20 Jul 2005 11:52
47 lines
2359 bytes
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
Author: Carlos
Date: Mon, 25 Jul 2005 22:18
Date: Mon, 25 Jul 2005 22:18
73 lines
3444 bytes
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
Author: David Serrano (Hue-Bond)
Date: Tue, 26 Jul 2005 19:15
Date: Tue, 26 Jul 2005 19:15
29 lines
1990 bytes
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
Author: Carlos
Date: Tue, 26 Jul 2005 22:18
Date: Tue, 26 Jul 2005 22:18
21 lines
1595 bytes
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
Author: Gonzalo Pérez de Olaguer Córdoba
Date: Tue, 26 Jul 2005 22:55
Date: Tue, 26 Jul 2005 22:55
23 lines
1994 bytes
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
Author: David Serrano (Hue-Bond)
Date: Wed, 27 Jul 2005 02:34
Date: Wed, 27 Jul 2005 02:34
15 lines
1716 bytes
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
Author: Carlos
Date: Wed, 27 Jul 2005 03:20
Date: Wed, 27 Jul 2005 03:20
19 lines
1756 bytes
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
Author: Santiago Romero
Date: Thu, 28 Jul 2005 06:08
Date: Thu, 28 Jul 2005 06:08
14 lines
1692 bytes
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
Author: J.A. Gutierrez
Date: Thu, 28 Jul 2005 06:54
Date: Thu, 28 Jul 2005 06:54
17 lines
1907 bytes
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