Thread View: es.comp.os.linux.programacion
4 messages
4 total messages
Started by jose maria
Mon, 22 Feb 2010 20:07
sustituir caracteres
Author: jose maria
Date: Mon, 22 Feb 2010 20:07
Date: Mon, 22 Feb 2010 20:07
40 lines
2886 bytes
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
Author: Gonzalo Pérez de Olaguer Córdoba
Date: Mon, 22 Feb 2010 20:47
Date: Mon, 22 Feb 2010 20:47
75 lines
4050 bytes
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
Author: Ignacio Arenaza
Date: Mon, 22 Feb 2010 21:32
Date: Mon, 22 Feb 2010 21:32
41 lines
2407 bytes
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
Author: jose maria
Date: Wed, 24 Feb 2010 14:14
Date: Wed, 24 Feb 2010 14:14
35 lines
2595 bytes
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