Holen Sie sich die ersten N Ausgabezeilen einer Pipe-Operation

Holen Sie sich die ersten N Ausgabezeilen einer Pipe-Operation

Ich verwende einen Pipe-Befehl, um eine große Produktionsdatenbank mit diesem Befehl von einem Host auf einen anderen zu migrieren:

mysqldump <someparams> | pv | mysql <someparams>

Und ich muss Zeile 23 (oder sagen wir die ersten X Zeilen) (als Datei gespeichert oder einfach in der Bash-Ausgabe) aus dem SQL extrahieren, das von einem Server zum anderen übertragen wird.

Was ich versucht habe:

  • Verketten Sie in der Ausgabe less, um zumindest das Scrollen der Ausgabe zu sehen, aber kein Glück

    mysqldump <someparams> | pv | mysql <someparams> | less

  • Habe darüber gelesen sed, aber es ist für mich nicht nützlich

  • Verwenden von head zum Schreiben in eine Datei, diese ist jedoch leer

mysqldump <someparams> | pv | mysql <someparams> | head -n 25 > somefile.txt

Die einzige Anforderung, die ich habe, ist, dass ich diese SQL-Datei nicht speichern kann.

Irgendeine Idee?

Danke

Antwort1

Mitzsh

mysqldump <someparams> |
  pv > >(sed '22,24!d' > saved-lines-22-to-24.txt) |
  mysql <someparams>

Mit bashoder zsh):

mysqldump <someparams> |
  pv |
  tee >(sed '22,24!d' > saved-lines-22-to-24.txt) |
  mysql <someparams>

(Beachten Sie jedoch, dass as bashnicht auf diesen sedVorgang wartet und daher nicht garantiert werden kann, dass saved-lines-22-to-24.txter abgeschlossen ist, wenn Sie den nächsten Befehl im Skript ausführen).

Oder Sie müssen sedschreiben:

mysqldump <someparams> |
  pv |
  sed '22,24 w saved-lines-22-to-24.txt' |
  mysql <someparams>

Um es als Ausgabe zu erhalten, mit zsh:

{mysqldump <someparams> |
  pv > >(sed '22,24!d' >&3) |
  mysql <someparams>} 3>&1

oder bash/ zsh:

{ mysqldump <someparams> |
  pv |
  tee >(sed '22,24!d' >&3)
  mysql <someparams>
} 3>&1

verwandte Informationen