
Estou usando um comando canalizado para migrar um grande banco de dados de produção de um host para outro usando este comando:
mysqldump <someparams> | pv | mysql <someparams>
E preciso extrair a linha 23 (ou digamos as primeiras X linhas) (salva como arquivo ou simplesmente na saída do bash) do SQL passando de um servidor para outro.
O que eu tentei:
Concatene em output
less
, pelo menos para ver a rolagem da saída, mas sem sortemysqldump <someparams> | pv | mysql <someparams> | less
Leia sobre
sed
, mas não é útil para mimUsando head para gravar em um arquivo, mas está vazio
mysqldump <someparams> | pv | mysql <someparams> | head -n 25 > somefile.txt
O único requisito que tenho é que não consigo salvar este arquivo .sql.
Qualquer ideia?
Obrigado
Responder1
Comzsh
mysqldump <someparams> |
pv > >(sed '22,24!d' > saved-lines-22-to-24.txt) |
mysql <someparams>
Com bash
(ou zsh
):
mysqldump <someparams> |
pv |
tee >(sed '22,24!d' > saved-lines-22-to-24.txt) |
mysql <someparams>
(embora tenha cuidado, pois bash
não espera por esse sed
processo, não é garantido que ele saved-lines-22-to-24.txt
estará concluído no momento em que você executar o próximo comando no script).
Ou você pode ter sed
que escrever:
mysqldump <someparams> |
pv |
sed '22,24 w saved-lines-22-to-24.txt' |
mysql <someparams>
Para tê-lo como saída, com zsh
:
{mysqldump <someparams> |
pv > >(sed '22,24!d' >&3) |
mysql <someparams>} 3>&1
ou bash
/ zsh
:
{ mysqldump <someparams> |
pv |
tee >(sed '22,24!d' >&3)
mysql <someparams>
} 3>&1