Was ist das? GNU Parallel ist ein Shell-Tool zum parallelen Ausführen von Rechenaufgaben auf einem oder mehreren Computern. Eine Rechenaufgabe kann ein Shell-Befehl oder ein Skriptprogramm sein, bei dem jede Zeile als Eingabe dient. Typische Eingaben sind Listen von Dateien, Hosts, Benutzern, URLs oder Tabellen; eine Berechnungsaufgabe kann auch ein aus einer Pipe gelesener Befehl sein. GNU Parallel teilt die Eingabe in Blöcke auf und führt sie parallel über Pipelines aus. Wenn Sie wissen, wie die Befehle xargs und tee verwendet werden, werden Sie GNU Parallel sehr benutzerfreundlich finden, da GNU Parallel über dieselben Optionen wie xargs verfügt. GNU Parallel kann die meisten Shell-Schleifen ersetzen und Rechenaufgaben schneller parallel erledigen. GNU Parallel stellt sicher, dass die Ausgabe dieselbe ist wie bei der sequentiellen Ausführung der Rechenaufgabe, sodass die Ausgabe von GNU Parallel bequem als Eingabe anderer Programme verwendet werden kann. GNU Parallel führt für jede Eingabezeile den angegebenen Befehl aus und verwendet dabei diese Zeile als Argument. Wenn kein Befehl angegeben wird, wird die Zeile als Befehl ausgeführt. Mehrere Eingabezeilen werden parallel ausgeführt. GNU Parallel wird häufig als Ersatz für xargs oder cat | bash verwendet. Führung Dieses Tutorial demonstriert die meisten Funktionen von GNU Parallel. Dies soll eher eine Option in GNU Parallel einführen als Beispiele für die Verwendung in der Praxis liefern. Verbringen Sie eine Stunde mit diesem Tutorial und Sie werden sich in die Befehlszeile verlieben. Vorbereitung Um den Beispielen in diesem Tutorial folgen zu können, müssen Sie zunächst Folgendes tun: Installieren Sie die neueste Version: (wget -O - pi.dk/3 || curl pi.dk/3/) | bash Mit diesem Befehl wird auch die neueste Version des Handbuchs installiert. man parallel_tutorial Der Großteil dieses Tutorials ist auch mit älteren Versionen kompatibel. abc-Datei Makefile: parallel -k echo ::: ABC > abc-Datei def-Datei Makefile: parallel -k echo :::DEF > def-Datei abc0-Datei Makefile: perl -e 'printf "A\0B\0C\0"' > abc0-Datei abc_-Datei Makefile: perl -e 'printf "A_B_C_"' > abc_-Datei tsv_datei.tsv Makefile: perl -e 'printf "f1\tf2\nA\tB\nC\tD\n"' > tsv-Datei.tsv Anzahl30000 Makefile: perl -e 'für(1..30000){print "$_\n"}' > Zahl30000 Anzahl1000000 Makefile: perl -e 'für(1..1000000){print "$_\n"}' > Zahl1000000 Anzahl_%Header Makefile: (echo %head1; echo %head2; perl -e 'für(1..10){print "$_\n"}') > Anzahl_%header Remote-Ausführung: SSH-Anmeldung ohne Passwort bei $SERVER1 und $SERVER2 Makefile: SERVER1=server.beispiel.com SERVER2=server2.beispiel.net Schließlich sollte der folgende Befehl erfolgreich ausgeführt werden: ssh $SERVER1 echo funktioniert ssh $SERVER2 echo funktioniert Verwenden Sie ssh-keygen -t dsa; ssh-copy-id $SERVER1, um die Umgebung zu erstellen (verwenden Sie eine leere Passphrase). Eingangsquelle Die Eingabequellen von GNU Parallel unterstützen Dateien, Befehlszeilen und die Standardeingabe (stdin oder Pipe). Einzelne Eingangsquelle Eingabe aus der Kommandozeile lesen: paralleles Echo ::: ABC Ausgabe (Reihenfolge kann variieren, da Aufgaben parallel ausgeführt werden):
Datei als Eingabequelle: parallel -a abc-file echo Die Ausgabe ist die gleiche wie oben. STDIN (Standardeingabe) als Eingabequelle: cat abc-Datei | paralleles Echo Die Ausgabe ist die gleiche wie oben. Mehrere Eingangsquellen GNU Parallel unterstützt die Angabe mehrerer Eingabequellen in der Befehlszeile und generiert alle möglichen Kombinationen: paralleles Echo ::: ABC ::: DEF Ausgabe:
Mehrere Dateien als Eingabequellen: parallel -a abc-Datei -a def-Datei echo Die Ausgabe ist die gleiche wie oben. STDIN (Standardeingabe) kann mit "-" als eine der Eingabequellen verwendet werden: cat abc-Datei | parallel -a - -a def-Datei echo Die Ausgabe ist die gleiche wie oben. Sie können "::::" anstelle von -a verwenden: cat abc-Datei | parallel echo :::: - def-Datei Die Ausgabe ist die gleiche wie oben. ::: und :::: können gemischt werden: paralleles Echo ::: ABC :::: def-Datei Die Ausgabe ist die gleiche wie oben. Anpassungsparameter –xapply nimmt ein Argument von jeder Eingabequelle: parallel --xapply echo :::ABC :::DEF Ausgabe:
Wenn eine der Eingabequellen kürzer ist, wird ihr Wert wiederholt: parallel --xapply echo ::: ABCDE ::: FG Ausgabe:
Ändern des Parametertrennzeichens GNU Parallel ermöglicht es Ihnen, Trennzeichen anstelle von ::: oder :::: anzugeben, was insbesondere dann nützlich ist, wenn diese beiden Symbole durch andere Befehle belegt sind: parallel --arg-sep ,, echo ,, ABC :::: def-Datei Ausgabe:
So ändern Sie das Parametertrennzeichen: parallel --arg-file-sep // echo ::: ABC // def-Datei Die Ausgabe ist die gleiche wie oben. Ändern von Parametertrennzeichen Standardmäßig behandelt GNU Parallel eine Zeile als einen Parameter: Es verwendet \n als Parametertrennzeichen. Mit -d können Sie Folgendes ändern: parallel -d _ echo :::: abc_-datei Ausgabe:
\0 steht für NULL: parallel -d '\0' echo :::: abc0-Datei Die Ausgabe ist die gleiche wie oben. -0 ist die Abkürzung für -d '\0' (wird häufig verwendet, um Eingaben von find ... -print0 zu lesen): parallel -0 echo ::::abc0-Datei Die Ausgabe ist die gleiche wie oben. Endwert in Eingabequelle GNU Parallel unterstützt die Angabe eines Wertes als Endzeichen: parallel -E Stopp Echo ::: AB Stopp CD Ausgabe:
Leere Zeilen überspringen Verwenden Sie --no-run-if-empty, um leere Zeilen zu überspringen: (Echo 1; Echo; Echo 2) | parallel --no-run-if-empty echo Ausgabe:
Befehlszeile erstellen Es ist kein Befehl angegeben, was bedeutet, dass das Argument der Befehl ist. Wenn nach parallel kein Befehl angegeben wird, werden diese Argumente als Befehle behandelt: parallel ::: ls 'echo foo' pwd Ausgabe: [Aktuelle Dateiliste] foo [Pfad zum aktuellen Arbeitsverzeichnis] Der Befehl kann eine Skriptdatei, eine ausführbare Binärdatei oder eine Bash-Funktion sein (die Funktion muss mit „export -f“ exportiert werden): # Funktioniert nur in Bash und nur wenn $SHELL=.../bash meine_funktion() { echo in my_func $1 } export -f meine_funktion parallel meine_funktion ::: 1 2 3 Ausgabe:
Zeichenfolge ersetzen 5 Arten von Ersatzsaiten GNU Parallel unterstützt eine Vielzahl von Ersetzungszeichenfolgen. Standardmäßig wird {} verwendet: paralleles Echo ::: A/BC Ausgabe:
Geben Sie {} an: paralleles Echo {} ::: A/BC Die Ausgabe ist die gleiche wie oben Entfernen Sie die Erweiterung {.}: paralleles Echo {.} ::: A/BC Ausgabe
Entfernen Sie den Pfad {/}: paralleles Echo {/} ::: A/BC Ausgabe:
Behalten Sie nur den Pfad {//}: paralleles Echo {//} ::: A/BC Ausgabe:
Entfernen Sie den Pfad und die Erweiterung {/.}: paralleles Echo {/.} ::: A/BC Ausgabe:
Ausgabeaufgabennummer: paralleles Echo {#} ::: A/BC Ausgabe:
Ändern der Ersetzungszeichenfolge Verwenden Sie -I, um die Ersetzungszeichenfolge in {} zu ändern: parallel -I ,, echo ,, ::: A/BC Ausgabe:
--extensionreplace ersetzen {.}: parallel --extensionreplace ,, echo ,, ::: A/BC Ausgabe:
–basenamereplace ersetzt {/}: parallel --basenamereplace ,, echo ,, ::: A/BC Ausgabe:
--dirnamereplace ersetzen {//}: parallel --dirnamereplace ,, echo ,, ::: A/BC Ausgabe:
–basenameextensionreplace ersetzt {/.}: parallel --basenameextensionreplace ,, echo ,, ::: A/BC Ausgabe:
–seqreplace ersetzt {#}: parallel --seqreplace ,, echo ,, ::: ABC Ausgabe:
Ersetzen Sie die Zeichenfolge an der angegebenen Position Wenn mehrere Eingabequellen vorhanden sind, können Sie die Parameter einer bestimmten Eingabequelle über {number} angeben: paralleles Echo {1} und {2} ::: AB ::: CD Ausgabe:
Sie können / // /. und .: verwenden, um die angegebene Ersetzungszeichenfolge zu ändern: paralleles Echo /={1/} //={1//} /.={1/.} .={1.} ::: A/BC D/EF Ausgabe:
Positionen können negativ sein, was auf eine Rückwärtszählung hinweist: paralleles Echo 1={1} 2={2} 3={3} -1={-1} -2={-2} -3={-3} ::: AB ::: CD ::: EF Ausgabe:
Spaltenweise Eingabe Verwenden Sie --colsep, um die Zeilen in der Datei als Eingabeparameter in Spalten aufzuteilen. Im Folgenden wird die TAB-Taste (\t) verwendet:
Parameternamen angeben Verwenden Sie --header, um den ersten Wert in jeder Eingabezeile als Parameternamen zu verwenden: parallel --header : echo f1={f1} f2={f2} ::: f1 AB ::: f2 CD Ausgabe:
Verwenden Sie --colsep, um Dateien zu verarbeiten, die TAB als Trennzeichen verwenden: parallel --header : --colsep '\t' echo f1={f1} f2={f2} :::: tsv-datei.tsv Ausgabe:
Mehrere Parameter –xargs ermöglicht GNU Parallel, mehrere Argumente pro Zeile zu unterstützen (mit einer Obergrenze): Katze Nummer30000 | parallel --xargs echo | wc -l Ausgabe:
Die 30.000 Parameter sind auf zwei Zeilen aufgeteilt. Die Obergrenze für die Anzahl der Parameter in einer Zeile wird mit -s angegeben. Im Folgenden wird angegeben, dass die maximale Länge 10.000 beträgt und in 17 Zeilen aufgeteilt wird: cat num30000 | parallel --xargs -s 10000 echo | wc -l Um eine bessere Parallelität zu erreichen, verteilt GNU Parallel die Parameter, nachdem das Lesen der Datei abgeschlossen ist. GNU Parallel startet die zweite Aufgabe erst, nachdem der letzte Parameter gelesen wurde. Zu diesem Zeitpunkt verteilt es alle Parameter gleichmäßig auf die vier Aufgaben (sofern vier Aufgaben angegeben sind). Die erste Aufgabe ist dieselbe wie im obigen Beispiel mit –xargs, aber die zweite Aufgabe wird gleichmäßig in 4 Aufgaben aufgeteilt, also insgesamt 5 Aufgaben. cat num30000 | parallel --jobs 4 -m echo | wc -l Ausgabe:
Zur besseren Übersicht sind dem 10-Punkte-Parameter 4 Aufgaben zugeordnet: parallel --jobs 4 -m echo ::: {1..10} Ausgabe:
Die Ersetzungszeichenfolge kann Teil eines Wortes sein. Erfahren Sie den Unterschied zwischen -m und -X anhand der folgenden beiden Befehle: parallel --jobs 4 -m echo pre-{}-post ::: ABCDEFG Ausgabe:
-X ist das Gegenteil von -m: parallel --jobs 4 -X echo pre-{}-post ::: ABCDEFG
Verwenden Sie -N, um die Anzahl der Parameter pro Zeile zu begrenzen: parallel -N3 echo :::ABCDEFGH Ausgabe:
Mit -N kann auch eine Position angegeben werden, an der eine Zeichenfolge ersetzt werden soll: parallel -N3 echo 1={1} 2={2} 3={3} ::: ABCDEFGH Ausgabe:
-N0 liest nur ein Argument, hängt aber nichts an: parallel -N0 echo foo ::: 1 2 3 Ausgabe:
Verweise Wenn die Befehlszeile Sonderzeichen enthält, müssen diese durch Anführungszeichen geschützt werden. Das Perl-Skript „print "@ARGV\n"“ macht dasselbe wie das Echo von Linux. perl -e 'drucken "@ARGV\n"' A Ausgabe:
Wenn Sie diesen Befehl mit GNU Parallel ausführen, muss der Perl-Befehl in Anführungszeichen gesetzt werden: parallel perl -e 'print "@ARGV\n"' ::: Das wird nicht funktionieren Ausgabe:
Verwenden Sie -q, um den Perl-Befehl zu schützen: parallel -q perl -e 'print "@ARGV\n"' ::: Das funktioniert Ausgabe:
Sie können auch ': verwenden. parallel perl -e \''print "@ARGV\n"'\' ::: Das funktioniert auch Ausgabe:
Verwenden von -quote: parallel --shellquote parallel: Achtung: Die Eingabe wird vom Terminal gelesen. Nur Experten machen das absichtlich. Zum Beenden STRG-D drücken. perl -e 'drucken "@ARGV\n"' [STRG-D] Ausgabe:
Sie können auch den folgenden Befehl verwenden: parallel perl\ -e\ \'print\ \"@ARGV\\n\"\' ::: Das funktioniert auch Ausgabe:
Leerzeichen entfernen Verwenden Sie --trim, um Leerzeichen zwischen den Argumenten zu entfernen: parallel --trim r echo pre-{}-post ::: ' A ' Ausgabe:
Entfernen Sie die Leerzeichen auf der linken Seite: parallel --trim l echo pre-{}-post ::: ' A ' Ausgabe:
Entfernen Sie die Leerzeichen auf beiden Seiten: parallel --trim lr echo pre-{}-post ::: ' A ' Ausgabe:
Steuerausgang Verwenden Sie den Parameter als Ausgabepräfix: parallel --tag echo foo-{} ::: ABC Ausgabe:
Ändern Sie das Ausgabepräfix –tagstring: parallel --tagstring {}-bar echo foo-{} ::: ABC Ausgabe:
Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird. Das könnte Sie auch interessieren:
|
<<: Beispielcode für die Django+MySQL-Konfiguration und einfache Bedienung der Datenbank
Dieser Artikel beschreibt anhand eines Beispiels,...
Inhaltsverzeichnis 1. Was ist ein Index? 2. Warum...
Inhaltsverzeichnis MySQL Truncate-Verwendung 1. T...
Listen werden verwendet, um eine Reihe ähnlicher o...
Vorschauadresse: https://ovsexia.gitee.io/leftfix...
Jede dieser 16 Sites ist eine sorgfältige Lektüre ...
mysql kopiert die Dateien im Datenverzeichnis, um...
Inhaltsverzeichnis Vorwort: 1. Indexmethode erste...
Inhaltsverzeichnis Szenarioanalyse Entwicklung Zu...
Konfiguration Vorwort Projektaufbau: basierend au...
Während meines Praktikums im letzten Studienjahr ...
Die erste Methode: Docker-Installation 1. Ziehen ...
In diesem Artikel wird der spezifische Code von V...
npm deinstallieren sudo npm deinstallieren npm -g...
Inhaltsverzeichnis Einführung Einführung Aggregat...