
Estoy usando un comando canalizado para migrar una base de datos de producción grande de un host a otro usando este comando:
mysqldump <someparams> | pv | mysql <someparams>
Y necesito extraer la línea 23 (o digamos las primeras X líneas) (guardada como archivo o simplemente en la salida de bash) del SQL que pasa de un servidor a otro.
Lo que he probado:
Concatenar en la salida
less
, al menos para ver la salida desplazándose, pero no hubo suertemysqldump <someparams> | pv | mysql <someparams> | less
Lea sobre
sed
, pero no me es útil.Usando head para escribir en un archivo, pero está vacío
mysqldump <someparams> | pv | mysql <someparams> | head -n 25 > somefile.txt
El único requisito que tengo es que no puedo guardar este archivo .sql.
¿Alguna idea?
Gracias
Respuesta1
Conzsh
mysqldump <someparams> |
pv > >(sed '22,24!d' > saved-lines-22-to-24.txt) |
mysql <someparams>
Con bash
o zsh
):
mysqldump <someparams> |
pv |
tee >(sed '22,24!d' > saved-lines-22-to-24.txt) |
mysql <someparams>
(aunque tenga en cuenta que, como bash
no espera ese sed
proceso, no se garantiza que saved-lines-22-to-24.txt
esté completo cuando ejecute el siguiente comando en el script).
O podrías tener sed
que escribir:
mysqldump <someparams> |
pv |
sed '22,24 w saved-lines-22-to-24.txt' |
mysql <someparams>
Para tenerlo como salida, con zsh
:
{mysqldump <someparams> |
pv > >(sed '22,24!d' >&3) |
mysql <someparams>} 3>&1
o bash
/ zsh
:
{ mysqldump <someparams> |
pv |
tee >(sed '22,24!d' >&3)
mysql <someparams>
} 3>&1