🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: es.comp.os.linux.programacion
4 messages
4 total messages Started by jose maria Mon, 22 Feb 2010 20:07
sustituir caracteres
#236
Author: jose maria
Date: Mon, 22 Feb 2010 20:07
40 lines
2886 bytes
* Obtengo un listado gigantesco de la forma siguiente
ls -1Q -I undel /media/cluster1/trash > fichero.tx

* Es de un directorio de cuarentena de un cluster, por lo que tiene 
caracteres especiales, inodos y datos que he de substituir por una ruta 
correcta a los puntos de montaje reales y me estoy haciendo un lio con cut, 
sed, tr, etc, al final estoy produciendo 3 ficheros intermedios y al ultimo 
le he de aplicar a todas las lineas un comando, se ejecuta con bash y cron, 
no doy con la tecla de algo decente, me da igual el lenguaje.

* Las lineas recibidas son de este estilo. 
"0000190E|ftp01|CBR101031|eb|copia server enjul|copia server"
"0000851B|ftp01|CBR101265|eb|Copia BBDD Sql server|Copia BBDD Sql 
server_20100217_2305.zip.z021.pgp"
"00008551|ftp01|CBR101265|eb|Copia Documentos|Copia 
Documentos_20100219_1900.zip.z220.pgp"
"00008554|ftp01|CBR101270|eb|dirs.dat.pgp"
"00008558|ftp01|CBR101270|eb|repair.rep"
"00008596|ftp01|CBR101331|eb|dirs.dat.pgp"
"002CBCFF|ftp03|CBR101321|eb|Datos7 19.02.2010 07.12|log_20091002_2216.txt"
"002CBD00|ftp03|CBR101321|eb|Datos7 19.02.2010 07.12|log_20091003_2204.txt"
"002CBD01|ftp03|CBR101321|eb|Datos7 19.02.2010 07.12|log_20091004_2208.txt"
"002CBD02|ftp03|CBR101321|eb|Datos7 19.02.2010 07.12|log_20091005_2250.txt"

* ignorese el salto de linea, el entrecomillado es una linea completa.

* Y debo de producir un resultado final como este y aplicarle un comando a 
cada linea.

"/media/cluster1/ftp01/CBR101031/copia server enjul/copia server"
"/media/cluster1/ftp03/CBR101321/eb/Datos7 19.02.2010 
07.12/log_20091005_2250.txt"

* Primero con tr substituyo los | por / , despues con cut busco el primer 
separador / , y por ultimo substituyo la cadena anterior al separador por 
"/media/cluster1/  y aplico el comando, en fin un lio y todo esto a traves 
de cron.

* Nota: Lo habitual es que sean unas 700.000.- lineas, no me importa el 
tiempo de ejecucion, si no que no produzca fallos con los espacios y demas.
Re: sustituir caracteres
#237
Author: Gonzalo Pérez de Olaguer Córdoba
Date: Mon, 22 Feb 2010 20:47
75 lines
4050 bytes
Hola jose maria <letrados@usernix.org>
el Mon, 22 Feb 2010 21:07:58 +0100 escribiste:

> * Obtengo un listado gigantesco de la forma siguiente
> ls -1Q -I undel /media/cluster1/trash > fichero.tx
> 
> * Es de un directorio de cuarentena de un cluster, por lo que tiene 
> caracteres especiales, inodos y datos que he de substituir por una ruta 
> correcta a los puntos de montaje reales y me estoy haciendo un lio con cut, 
> sed, tr, etc, al final estoy produciendo 3 ficheros intermedios y al ultimo 
> le he de aplicar a todas las lineas un comando, se ejecuta con bash y cron, 
> no doy con la tecla de algo decente, me da igual el lenguaje.
> 
> * Las lineas recibidas son de este estilo. 
> "0000190E|ftp01|CBR101031|eb|copia server enjul|copia server"
> "0000851B|ftp01|CBR101265|eb|Copia BBDD Sql server|Copia BBDD Sql 
> server_20100217_2305.zip.z021.pgp"
> "00008551|ftp01|CBR101265|eb|Copia Documentos|Copia 
> Documentos_20100219_1900.zip.z220.pgp"
> "00008554|ftp01|CBR101270|eb|dirs.dat.pgp"
> "00008558|ftp01|CBR101270|eb|repair.rep"
> "00008596|ftp01|CBR101331|eb|dirs.dat.pgp"
> "002CBCFF|ftp03|CBR101321|eb|Datos7 19.02.2010 07.12|log_20091002_2216.txt"
> "002CBD00|ftp03|CBR101321|eb|Datos7 19.02.2010 07.12|log_20091003_2204.txt"
> "002CBD01|ftp03|CBR101321|eb|Datos7 19.02.2010 07.12|log_20091004_2208.txt"
> "002CBD02|ftp03|CBR101321|eb|Datos7 19.02.2010 07.12|log_20091005_2250.txt"
> 
> * ignorese el salto de linea, el entrecomillado es una linea completa.
> 
> * Y debo de producir un resultado final como este y aplicarle un comando a 
> cada linea.
> 
> "/media/cluster1/ftp01/CBR101031/copia server enjul/copia server"
> "/media/cluster1/ftp03/CBR101321/eb/Datos7 19.02.2010 
> 07.12/log_20091005_2250.txt"
> 
> * Primero con tr substituyo los | por / , despues con cut busco el primer 
> separador / , y por ultimo substituyo la cadena anterior al separador por 
> "/media/cluster1/  y aplico el comando, en fin un lio y todo esto a traves 
> de cron.

esto lo puedes hacer más fácil con sed:

sed -e 's=^([^/]+)="/media/cluster1='

> * Nota: Lo habitual es que sean unas 700.000.- lineas, no me importa el 
> tiempo de ejecucion, si no que no produzca fallos con los espacios y demas.

Si sólo has de hacer estos dos cambios que explicas aquí, y luego aplicar
un comando a cada línea, tendrías algo así:

cat fichero_original | tr \| / | sed ... | xargs -1 comando

Lo digo de memoria. Tú sabrás mejor que yo qué es exactamente lo que quieres
hacer. Pero esa secuencia será bastante rápida de ejecutar.

Si quieres un único ejecutable, lo harás bien con perl.

-- 
Gonzalo Pérez de Olaguer Córdoba <gpoc@iies.es> --- www.gpoc.es
PGP key 2861C704 --- F206 5671 6789 425D 111C  1302 214F 1934 2861 C704
Re: sustituir caracteres
#238
Author: Ignacio Arenaza
Date: Mon, 22 Feb 2010 21:32
41 lines
2407 bytes
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

jose maria <letrados@usernix.org> writes:

> * Y debo de producir un resultado final como este y aplicarle un comando a 
> cada linea.
>
> "/media/cluster1/ftp01/CBR101031/copia server enjul/copia server"
> "/media/cluster1/ftp03/CBR101321/eb/Datos7 19.02.2010 
> 07.12/log_20091005_2250.txt"

Una de tantas formas, suponiendo que las comillas dobles de inicio y
fin que has escrito no formen parte de las l�neas en s� (se muestra en
varias lineas, pero deber�a ir en una sola):

awk -F'|' '{ print "/media/cluster1/" $2 "/" $3 "/" $4 "/" $5 "/" $6}'
   fichero | while read i; do orden -parametros "$i"; done;

Si las lineas realmente contienen los caracters '"' al comienzo y al
final, algo como esto deber�a funcionar:

awk -F'|' '{ print "/media/cluster1/" $2 "/" $3 "/" $4 "/" $5 "/"
    substr($6,1,length($6)-1)}' fichero | while read i; do orden
       -parametros "$i"; done;  

Saludos,
I�aki.

- -- 
Mondragon University

GPG Key available at public keyservers
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Processed by Mailcrypt and GPG

iD8DBQFLgvgHRgC43oKhB3QRAnGiAKDffvpsbvS/LG+DYYQJQ6q9e4YkbwCePF9F
4uyCrLWQt/hamk3DFct6sHs=
=Nr8O
-----END PGP SIGNATURE-----
Re: sustituir caracteres
#239
Author: jose maria
Date: Wed, 24 Feb 2010 14:14
35 lines
2595 bytes
Ignacio Arenaza wrote:


> 
> Una de tantas formas, suponiendo que las comillas dobles de inicio y
> fin que has escrito no formen parte de las l�neas en s� (se muestra en
> varias lineas, pero deber�a ir en una sola):
> 
> awk -F'|' '{ print "/media/cluster1/" $2 "/" $3 "/" $4 "/" $5 "/" $6}'
>    fichero | while read i; do orden -parametros "$i"; done;
> 
> Si las lineas realmente contienen los caracters '"' al comienzo y al
> final, algo como esto deber�a funcionar:
> 
> awk -F'|' '{ print "/media/cluster1/" $2 "/" $3 "/" $4 "/" $5 "/"
>     substr($6,1,length($6)-1)}' fichero | while read i; do orden
>        -parametros "$i"; done;
> 
> 

* Veo la idea lo que pasa es que produce efectos diferentes en las lineas, 
seguramente por que en rutas muy largas el cluster elimina caracteres del 
inodo, voy a ver si descubro el motivo, he hablado con los desarrolladores 
para que la "papelera" se liste con rutas de directorios standard relativas 
al punto de montaje del cluster, la utilidad es para rebajar el numero de 
copias de los ficheros que han sido marcados para borrar en el cluster y que 
quedan listados en la "papelera" por el tiempo especificado de cuarentena, 
pero se mantienen todas las copias en sus chunks origianles hasta que son 
borrados definitivamente, dandole un setgoal 1 a todos los de la papelera 
reduzco el espacio ocupado por ficheros de los que no necesito tolerancia a 
fallos, estamos hablando de 700.000 x n copias, puesto que el usuario ha 
dado la orden de borrado. gracias.


* Un saludo, jose maria.
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