gunzip mehrere Dateien und verketten parallel?

1607
719016

Ist es möglich, mehrere Dateien zu komprimieren und zu einer großen Datei zu verketten, aber bei einer Multicore-Maschine parallel? Zum Beispiel mache ich jetzt:

gunzip -c file1.gz > final gunzip -c file2.gz >> final gunzip -c file3.gz >> final gunzip -c file4.gz >> final 

Kann ich dasselbe tun, damit die Gunzip-Verarbeitung der verschiedenen Dateien in verschiedenen CPUs in der Multicore-Maschine erfolgt und sie alle in derselben endgültigen Datei verkettet sind?

2
Sind Sie sicher, dass die CPU und nicht die Datenträgergeschwindigkeit begrenzt ist? Daniel Andersson vor 11 Jahren 0

2 Antworten auf die Frage

4
Ole Tange

It is a little shorter to do that using GNU Parallel:

parallel gunzip -c ::: file*.gz > final 

but essentially it also writes to temporary files.

Watch the introvideos to learn more: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

1
akira

Sie müssen dafür temporäre Dateien verwenden:

gunzip -c file1.gz > final & one=$! gunzip -c file2.gz > final2 & two=$! gunzip -c file3.gz > final3 & three=$! gunzip -c file4.gz > final4 & four=$!  wait $one && wait $two && wait $three && wait $four cat final2 >> final cat final3 >> final cat final4 >> final 

Um die Teile einer größeren Datei in die eine endgültige Datei zu dekomprimieren, müssen Sie die dekomprimierte Größe der Teile kennen. Nur dann können Sie eine leere leere Datei erstellen und die Ausgabe der Dekomprimierung an die richtige Stelle in die große Datei schreiben ( ddz. B.). da Sie die dekomprimierte Größe nicht kennen (ohne zuerst die Teile zu dekomprimieren), funktioniert dies nicht.