次のコマンドを使用して、パイプラインコマンドを使用してあるホストから別のホストに大規模な本番データベースを移行しています。
mysqldump <someparams> | pv | mysql <someparams>
あるサーバーから別のサーバーに渡されたSQLから23行(または最初のX行)を抽出する必要があります(ファイルに保存するか、単にbash出力に保存)。
私が試したこと:
出力を接続すると、少なくとも
less
出力スクロールを見ることができますが、運はありません。mysqldump <someparams> | pv | mysql <someparams> | less
それについて読んでみましたが、
sed
私には効果がありませんでした。ファイルへの書き込みにヘッドを使用しましたが、ファイルは空です。
mysqldump <someparams> | pv | mysql <someparams> | head -n 25 > somefile.txt
唯一の要件は、この.sqlファイルを保存できないことです。
どんなアイデアがありますか?
ありがとう
答え1
そしてzsh
mysqldump <someparams> |
pv > >(sed '22,24!d' > saved-lines-22-to-24.txt) |
mysql <someparams>
そしてbash
(OR zsh
):
mysqldump <someparams> |
pv |
tee >(sed '22,24!d' > saved-lines-22-to-24.txt) |
mysql <someparams>
(プロセスbash
を待たないため、スクリプトで次のコマンドを実行するまでプロセスが完了するというsed
保証はありません。)saved-lines-22-to-24.txt
sed
または、次のように書く必要があります。
mysqldump <someparams> |
pv |
sed '22,24 w saved-lines-22-to-24.txt' |
mysql <someparams>
これを出力として取得するには、次のようにしますzsh
。
{mysqldump <someparams> |
pv > >(sed '22,24!d' >&3) |
mysql <someparams>} 3>&1
またはbash
/ zsh
:
{ mysqldump <someparams> |
pv |
tee >(sed '22,24!d' >&3)
mysql <someparams>
} 3>&1