Würde der Shell-Befehl dazu führen, dass nicht genügend Arbeitsspeicher vorhanden ist?

287
Hancy

Ich muss zwei Dateien hinzufügen.

DATEI 1:

a A1 a A2 a A3 ... c C1 c C2 ... 

DATEI 2:

a feature1_of_a a feature2_of_a ... a featureN_of_a ... ... c feature1_of_c c feature2_of_c ... 

Nach dem Beitritt könnte ich die Datei so erhalten:

A1 feature1_of_a A2 feature1_of_a A3 feature1_of_a A1 feature2_of_a A2 feature2_of_a A3 feature2_of_a ... A1 featureN_of_a A2 featureN_of_a A3 featureN_of_a ... 

Um das zu tun: Ich schrieb den Shell-Befehl join -11 -21 -o1.2,2.2 file1 file2. Aber das Problem ist: Nummer N könnte riesig sein. Wenn also join alle Daten gleichzeitig in den Speicher einliest, reicht der Speicher möglicherweise nicht aus.

Ich weiß nicht, wie Join implementiert wird. Wollte die Momery zu einem Problem werden? Wenn ja, gibt es eine Möglichkeit, das zu bekommen, was ich will?

-1

1 Antwort auf die Frage

1
Jonathan Leffler

Wie groß denkst du, könnte N sein?

Wenn es sich nicht um "viele Millionen" handelt oder Sie in einer ungewöhnlich engen Umgebung (Speicherarmut) arbeiten, wird Ihnen der Speicher nicht ausgehen.

Ich habe in meinem 1G-Speichercomputer Folgendes versucht: 10 Zeile in Datei1 erstellen, alle ersten Kollummen sind 'a'. Dann setze ich file2 N = 2.000.000, die Größe von file2 beträgt 500M und alle ersten collum von file2 sind 'a'. Aber dann führe ich den Befehl "join -11 -21 -o1.2.2.2 file1 file2" aus, der abstürzte. Weißt du warum es passiert ist? Hancy vor 11 Jahren 0
Der Speicher ist knapp geworden, weil Sie in Ihrer Anfrage nicht sehr vernünftig sind. Sie machen ein kartesisches Produkt aus den Zeilen in Datei1 und den Zeilen in Datei2. Ich bin etwas überrascht, dass 500 MB nicht im Hauptspeicher gehalten werden konnten. Ich weiß nicht, ob es einen Unterschied macht, wenn Sie file1 und file2 in der Befehlszeile neu anordnen (einen Versuch wert, weil es einfach ist), aber ich bin nicht überrascht, dass es keinen Unterschied macht. Befinden Sie sich auf einer 32-Bit-Maschine oder einer 64-Bit-Maschine? Ist das `join` ausführbarer 32-Bit oder 64-Bit? Sind Sie sicher, dass die Ausgabe nützlich ist? Jonathan Leffler vor 11 Jahren 0