Zeilenweise aus gepackter Datei lesen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
rannseier
Beiträge: 79
Registriert: 24.09.2007 12:37:30

Zeilenweise aus gepackter Datei lesen

Beitrag von rannseier » 04.12.2024 09:48:02

Hallo zusammen,

Ich bearbeite immer wieder mal größere Textdateien mit 200-350.000 Zeilen. Aus Platzgründen sind diese normalerweise mit gzip gepackt. Für einfache Dinge kann ich die mit zcat xyz.gz | grep xyz durchforsten.

In der Bash lese ich die Dateien bisher (nach dem entpacken) so aus:

Code: Alles auswählen

while read LINE
In Perl so:

Code: Alles auswählen

open("cdrfile", "<$cdr_dateiname") 

while(<cdrfile>)
 {
  push(@Zeilen,$_);
  $zeilen_counter++;
 }
close("cdrfile");
Wie kann ich das am einfachsten umbauen um direkt aus den gepackten Dateien zu lesen ohne die restliche Logik umzubauen?

tobo
Beiträge: 2346
Registriert: 10.12.2008 10:51:41

Re: Zeilenweise aus gepackter Datei lesen

Beitrag von tobo » 04.12.2024 10:18:58

Man kann direkt zgrep, zmore oder zless auf die gepackte Datei anwenden. Viele Programmoptionen darin sind den z-losen Progammversionen identisch oder ähnlich.
Ansonsten, das mit einer Pipe vorgeschaltete zcat funktioniert natürlich nicht nur für grep, sondern auch für ein `while read line'.
Zuletzt geändert von tobo am 04.12.2024 11:25:05, insgesamt 1-mal geändert.

uname
Beiträge: 12406
Registriert: 03.06.2008 09:33:02

Re: Zeilenweise aus gepackter Datei lesen

Beitrag von uname » 04.12.2024 10:58:56

Der Editor Vim kann wohl auch direkt .gz-Dateien lesen. Ich bin mir aber nicht sicher, ob das performant ist.

Benutzeravatar
MSfree
Beiträge: 11605
Registriert: 25.09.2007 19:59:30

Re: Zeilenweise aus gepackter Datei lesen

Beitrag von MSfree » 04.12.2024 11:31:53

uname hat geschrieben: ↑ zum Beitrag ↑
04.12.2024 10:58:56
Der Editor Vim kann wohl auch direkt .gz-Dateien lesen.
Und auch andere Kompressionsformen wie .xz oder .zip wenn die entsprechenden Unpack-Programme installiert sind.
Ich bin mir aber nicht sicher, ob das performant ist.
Ab einer bestimmten Größe sicher nicht mehr. Letztlich muß der komplette Inhalt der entkomprimierten Datei ins RAM. Die sinnvoll nutzbare Grenze hängt von der CPU-Geschwindigkeit, der HDD/SSD/NVMe-Geschwindigkeit und der Menge des freien Arbeitsspeichers ab.

Wenn man die komprimierten Daten jedch nur lesend durchsuchen will, ist vim keine gute Idee. Komprimierte Daten lassen sich ziemlich effizient linear durcharbeiten, das benötigt verhältnismässig wenig Hauptspeicher, die Arbeitsgeschwindigkeit ist nur eine Frage, wie schnell die CPU die Daten entkomprimieren kann.

Benutzeravatar
hikaru
Moderator
Beiträge: 13911
Registriert: 09.04.2008 12:48:59

Re: Zeilenweise aus gepackter Datei lesen

Beitrag von hikaru » 04.12.2024 12:07:13

uname hat geschrieben: ↑ zum Beitrag ↑
04.12.2024 10:58:56
Der Editor Vim kann wohl auch direkt .gz-Dateien lesen. Ich bin mir aber nicht sicher, ob das performant ist.
Nein. ;)
Gepackt oder nicht, wenn du versuchst, 2GB-große Textdateien in vim zu öffnen, dann schaust du besser vorher nach wie viel Kaffee im Haus ist.

tobo
Beiträge: 2346
Registriert: 10.12.2008 10:51:41

Re: Zeilenweise aus gepackter Datei lesen

Beitrag von tobo » 04.12.2024 12:18:33

Du rechnest mit über 5500 Zeichen pro Zeile?

Benutzeravatar
hikaru
Moderator
Beiträge: 13911
Registriert: 09.04.2008 12:48:59

Re: Zeilenweise aus gepackter Datei lesen

Beitrag von hikaru » 04.12.2024 12:28:25

Ich berichte von meiner Erfahrung mit vim und "größeren Textdateien". ;-)

Benutzeravatar
MSfree
Beiträge: 11605
Registriert: 25.09.2007 19:59:30

Re: Zeilenweise aus gepackter Datei lesen

Beitrag von MSfree » 04.12.2024 12:43:46

hikaru hat geschrieben: ↑ zum Beitrag ↑
04.12.2024 12:28:25
Ich berichte von meiner Erfahrung mit vim und "größeren Textdateien". ;-)
2GB Text geht im vim noch ganz gut, öffnen und schreiben dauern hier auf einem i3-10100 um die 20s. Eine auf 2GB komprimierte Textdatei entpackt sich aber durchaus auf bis zu 20GB und das wird dann richtig laaaaaaaaaahm.

uname
Beiträge: 12406
Registriert: 03.06.2008 09:33:02

Re: Zeilenweise aus gepackter Datei lesen

Beitrag von uname » 04.12.2024 14:41:24

Naja 350000 Zeilen sind ja nicht wirklich viel. Bei z. B. 100 Zeichen pro Zeile wären es in ASCII etwa 35 MB unkomprimiert. Wie lang ist denn eine Zeile im Durchschnitt.

rannseier
Beiträge: 79
Registriert: 24.09.2007 12:37:30

Re: Zeilenweise aus gepackter Datei lesen

Beitrag von rannseier » 09.12.2024 15:23:21

Max 1000 Bytes lt. wc -L

Antworten