Shell expansion of variables is converting $FILE
to an empty string. You need to put a backslash in front of $FILE
to prevent the shell from doing the expansion.
Wie verwende ich die "Filter" -Option von GNU split mit GNU parallel?
Ich versuche, eine Reihe riesiger gz-Dateien in komprimierte g-gepackte N-Linien zu zerlegen.
Um dies zu demonstrieren, betrachten wir Folgendes:
seq 100 | gzip > big_file0.gz
Ich kann dies wie folgt in mehrere komprimierte 10-Zeilen-Dateien aufteilen:
zcat big_file0.gz | split -l 10 --filter='gzip > $FILE.gz' - big_file0.
Nehmen wir an, wir haben einige große Dateien big_file0.gz
, big_file1.gz
...
Ich möchte jetzt jede dieser Dateien mit GNU parallel aufteilen. Hier ist der Befehl, mit dem ich komme:
parallel "zcat {} | split -l 10 --filter='gzip > $FILE.gz' - {.}." ::: big_file0.gz big_file1.gz
Die Shell-Ersetzung für $FILE
funktioniert jedoch nicht wie erwartet. $FILE
wird durch eine leere Zeichenfolge ersetzt, sodass die gesamte Ausgabe in eine aufgerufene Datei geschrieben wird .gz
.
Wie kann ich erreichen, dass die $FILE
Vertretung in GNU parallel funktioniert?
2 Antworten auf die Frage
Heute würden Sie die --pipe
Option von GNU Parallel verwenden :
parallel --seqreplace // "zcat {} | parallel --pipe -N 10 gzip '>{.}.{#}.gz'" ::: big_file0.gz big_file1.gz
Wenn Sie mit dem Hinzufügen zufrieden sind big_file0.gz big_file1.gz
, ist es noch einfacher:
zcat big_file0.gz big_file1.gz | parallel --pipe -N 10 gzip '>{#}.gz'
Verwandte Probleme
-
6
Welche zsh-Funktionen verwenden Sie?
-
8
Die Windows-Shell töten
-
3
Mac OS X: herkömmliche Orte, an denen Binärdateien gespeichert werden sollen
-
2
Mac OS X: einfaches Skript gesucht
-
2
Wie finde und vergleiche ich ähnliche Dateien im Dropbox-Ordner?
-
1
ksh entspricht perl $! Fehlerursache
-
3
Herausfinden, welcher Nicht-Symlink-Pfad wäre?
-
4
Wie kann ich ein Dateieigenschaftsdialogfeld von der Befehlszeile aus starten?
-
2
Kann ich beim Start von Terminal eine Reihe von Registerkarten einrichten?
-
2
Unterschied zwischen Lam und Paste