2016-09-06 8 views
1

bin ich GNUparallel und ich brauche Ihren Rat in Ausführung des Befehls völlig neu in Verwendung unter Verwendung GNUparallel:GNU Parallel | Pipe-Befehl

/home/admin/Gfinal/decoder/decdr.pl --gh --w14b /data/tmp/KRX12/a.bin | 
perl /home/admin/decout/decoder/flow.pl >> /data/tmp/decodedgfile/out_1.txt 

ich auf eine Liste von Dateien diesen Befehl ausgeführt werden soll (.bin) , also was ist der beste (schnellste) Ansatz, um dies zu erreichen mit GNUparallel Hinweis, dass die Ausgabe des ersten Teils des Befehls (/home/admin/Gfinal/decoder/decdr.pl --gh --w14b) ist sehr groß (> 2 GB).

Jede Hilfe wäre willkommen.

Antwort

0

Hier sind einige gute Videos für Gnu-parallel/parallel

Ref youtube Part 1: GNU Parallel script processing and execution

Hier ist ein Link von der GNU-Website für plattformspezifische Informationen.

Ref gnu parallel download information

„Multiple Eingangsquellen

GNU parallel können Quellen mehrere Eingabe gegeben auf der Befehlszeile nehmen GNU parallel erzeugt dann alle Kombinationen der Eingangsquellen.

parallel echo ::: ABC ::: DEF

Ausgabe (die Reihenfolge kann abweichen):

AD

AE

AF

BD

BE ............

die Eingangsquellen können Dateien sein:

parallel -a abc-file -a def-file echo" 

Ref GNU-Parallel-Tutorial

Mit Bezug auf das Rohr

Rohrkapazität Ein Rohr eine begrenzte Kapazität hat. Wenn das Rohr voll ist, wird ein Schreiben (2) blockieren oder fehlschlagen, abhängig davon, ob das O_NONBLOCK-Flag auf gesetzt ist (siehe unten). Verschiedene Implementierungen haben unterschiedliche Grenzen für die Rohrkapazität. Anwendungen sollten nicht auf eine bestimmte Kapazität angewiesen sein: Eine Anwendung sollte so konzipiert sein, dass ein Lesevorgang Daten verbraucht, sobald sie verfügbar ist, so dass ein Schreibprozess nicht blockiert bleibt.

In Linux versions before 2.6.11, the capacity of a pipe was the same 
    as the system page size (e.g., 4096 bytes on i386). Since Linux 
    2.6.11, the pipe capacity is 65536 bytes. Since Linux 2.6.35, the 
    default pipe capacity is 65536 bytes, but the capacity can be queried 
    and set using the fcntl(2) F_GETPIPE_SZ and F_SETPIPE_SZ operations. 
    See fcntl(2) for more information. 

PIPE_BUF POSIX.1 besagt, dass write (2) s mit weniger als PIPE_BUF Bytes atomic sein muss: Die Ausgabedaten werden als zusammenhängende Sequenz in die Pipe geschrieben. Schreibvorgänge von mehr als PIPE_BUF-Bytes können nicht atomar sein: Der -Kernel kann die Daten mit Daten verschachteln, die von anderen Prozessen geschrieben wurden. POSIX.1 erfordert PIPE_BUF mindestens 512 Byte. (Unter Linux PIPE_BUF ist 4096 Byte.) Die genaue Semantik hängt davon ab, ob der Dateideskriptor nicht blockierend ist (O_NONBLOCK), ob es mehrere Writer für die Pipe gibt, und auf n, die Anzahl der Bytes geschrieben:

Ref man7.org pipe

Sie konnten einen Blick auf fcntl F_GETPIPE_SZ und F_SETPIPE_SZ für weitere Informationen Operationen haben.

Ref fcntl

Alles Gute

1

Wird diese Arbeit:

parallel /home/admin/Gfinal/decoder/decdr.pl --gh --w14b {} '|' perl /home/admin/decout/decoder/flow.pl >> /data/tmp/decodedgfile/out_1.txt ::: /data/tmp/KRX12/*.bin 

(Wenn die Ausgabe von flow.pl mehr als die Festplatte ist I/O verarbeiten kann, versuchen parallel --compress).

Oder vielleicht:

parallel /home/admin/Gfinal/decoder/decdr.pl --gh --w14b {} '|' perl /home/admin/decout/decoder/flow.pl '>>' /data/tmp/decodedgfile/out_{#}.txt ::: /data/tmp/KRX12/*.bin 

Es hängt davon ab, ob Sie eine einzelne Ausgabedatei oder eine pro Eingabedatei soll.

Auch verbringen Sie eine Stunde zu Fuß durch das Tutorial. Ihre Befehlszeile wird Sie dafür lieben. man parallel_tutorial

+0

vielen dank für ihre antwort .. wirklich schätzen ihre arbeit .. noch eine frage ... verwendet --pipe nach (/home/admin/Gfinal/decoder/decdr.pl --gh --w14b) würde den Prozess schneller machen? – Helmy

+0

Nicht verstanden. Aber versuch es und messe es. –

Verwandte Themen