Article View: es.comp.os.linux.programacion
Article #1753Re: Como realizar un pequeño cambio en miles de ficheros de manera sencilla
From: 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.
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-mailReferences:
<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)