GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wie zerlegt man eine Datei wie Split in Stdout, um sie an einen Befehl weiterzuleiten?

Ich habe eine große .sql Datei voller SELECT Anweisungen, die Daten enthalten, die ich in meine SQL Server-Datenbank einfügen möchte. Ich suche nach einer Möglichkeit, den Inhalt der Datei zu nehmen, 100 Zeilen auf einmal, und ihn an die Befehle weiterzugeben, die ich festgelegt habe, um den Rest zu erledigen.

Grundsätzlich suche ich nach split das wird nach stdout ausgegeben , keine Dateien.

Ich verwende CygWin auch unter Windows, daher habe ich keinen Zugriff auf die vollständige Suite von Tools.

Akzeptierte Antwort:

Ich denke, der einfachste Weg, dies zu tun, ist:

while IFS= read -r line; do
  { printf '%sn' "$line"; head -n 99; } |
  other_commands
done <database_file

Sie müssen read verwenden für die erste Zeile in jedem Abschnitt, da es keine andere Möglichkeit zu geben scheint, anzuhalten, wenn das Ende der Datei erreicht ist. Weitere Informationen finden Sie unter:

  • Überprüfen Sie, ob die Pipe leer ist, und führen Sie einen Befehl für die Daten aus, wenn dies nicht der Fall ist
  • Wie kann ich die Ausgabe von einem Prozess an einen anderen weiterleiten, aber nur ausführen, wenn der erste eine Ausgabe hat?

Linux
  1. So speichern Sie die Befehlsausgabe in einer Datei unter Linux

  2. Wie kann man eine Teilmenge einer Datei zufällig abtasten?

  3. Stdout eines Befehls für T Sekunden verwerfen?

  4. Wie hängt man die Ausgabe an eine Datei an?

  5. stdout als Dateinamen für das Befehlszeilenprogramm übergeben?

So verwenden Sie den Truncate-Befehl unter Linux

ls-Befehl in Linux zum Auflisten von Dateien

So mischen Sie Zeilen in einer Datei unter Linux

So verwenden Sie den Befehl lsof unter Linux

Exa – Ein moderner Ersatz für den Befehl ls

So verwenden Sie den Linux-Befehl shred