[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: cat einer Textdatei .... nur von unten nach oben?



On 11/21/2011 11:18 AM, Michael Renner wrote:
> Moin,
> 
> mit 'cat' gebe ich Zeile für Zeile einer Datei aus. Von unten nach oben.
> Wie könnte ich denn von 'unten nach oben' ausgeben?
> 
> Hintergrund: eine Textdatei enthält ca. 50 Mio Zeilen mit Kopierbefehlen.
> Um die Laufzeit zu halbieren soll ein Script die Datei von oben nach unten,
> ein anderes von unten nach oben abarbeiten. Wenn sich die Scripte in der
> Mitte treffen (if [ -f $FILE ] ; ....) ist gut.

Das kling für mich eher nach Hausaufgaben. Aber die Antwort "tac" wurde
ja schon genannt. Alternativ kannst du auch einfach die Datei vorher in
zwei Teile aufsplitten und so zwei prozesse Starten, oder mehrere.

Aber unabhängig davon muss es deswegen nicht performanter werden. Am
meisten bremst die I/O sprich das auslesen der Datei von der Festplatte.
Das aufsplitten muss hier nicht wirklich schneller sein. Wenn nicht
genug Zeilen ausgelesen werden können als der CPU verarbeiten kann,
wirst du gar keinen Positiven effekt erzielen.

Sinvoller wäre es wenn die Datei gziped wird, und du gziped auf die
Datei zugreifst. Das reduziert die I/O am meisten, vorallem bei
Textdateien, und bringt den meisten Schub. Wenn es unbedingt Bash sein
muss dann kannst du hier "zcat" nutzen.

Und noch sinvoller wird es wenn du die Zeilen nur ausliest und
unabhängig davon dann eine maximale anzahl von Prozessen startest wie
Rico Koerner es schon erwähnte. Bzw. einzelne Threads oder noch besser
Asynchron abarbeitest. Die ersten beiden haben eher zu viel overhead.
Aber da wirst du mit der Bash nicht besonders weit kommen.


Reply to: