Superuser

Autor Thema: nicht unten dran-haengen sondern oben drauf-kleben  (Gelesen 17828 mal)

Offline Toktar

  • Sobl Master
  • ****
  • Beiträge: 333
Re: nicht unten dran-haengen sondern oben drauf-kleben
« Antwort #15 am: 02. April 2009, 20:07:36 »
Was ist denn gegen tac zu sagen. Damit gibst Du den Inhalt rückwärts aus und kannst die neuen Zeilen unten dranhängen....
Toktar
--
Jawoll!
Und DNS braucht's nicht, das ist was fuer Weicheier, die sich keine Zahlen merken koennen.
[Karlheinz Boehme in dcsf]

sonnenblen.de - Das unabhängige Sun User Forum

Re: nicht unten dran-haengen sondern oben drauf-kleben
« Antwort #15 am: 02. April 2009, 20:07:36 »

llothar

  • Gast
Re: nicht unten dran-haengen sondern oben drauf-kleben
« Antwort #16 am: 02. April 2009, 23:17:55 »
@llothar
jetzt habe ich deinen faden verloren. wie meinen?

Ich bin jetzt nicht der Shell Scripter aber irgendwas wie


cat neue_nachricht.txt | reverse -l  >> datei_mit_allen_nachrichten.txt

sowie

tail -n 100 datei_mit_allen_nachrichten.txt | reverse -l


"reverse -l" ist jetzt aber ein selbstgeschriebenes Tool. Hab gerade kein Unix am
laufen um zu sehen wie der Parmaeter wirklich heisst. "reverse -l" nimmt die
Eingabe entgegen und gibt sie umgekehrt wieder aus, mit option "-l" basierend
auf Zeilenbasis.

Mit obigem würdest du in der ersten Zeile halt eine Nachrichten  an dein Nachrichten  Log anhängen.
Und mit der zweiten Zeile die letzten 100 Zeilen aller Nachrichten ausgeben.

Komplexität ist immer O(n) mit n der Grösse der hinzufügenden Nachricht und der Anzahl der
Zeilen die du im CGI script ausgeben würdest.  Selbst wenn deine Datei in der du die
Nachrichten sammelst Gigabyte gross wird ist das also noch extrem performant.

Edit:
Erst jetzt sehe ich das Toktar geantwortet hat.
Statt reverse also "tac" nutzen und fertig.

Offline dornroeschen

  • Sobl Junior
  • **
  • Beiträge: 64
Re: nicht unten dran-haengen sondern oben drauf-kleben
« Antwort #17 am: 03. April 2009, 11:33:25 »
Erst jetzt sehe ich das Toktar geantwortet hat.
Statt reverse also "tac" nutzen und fertig.

oder /usr/bin/tail -r  ;D

Rainer

Offline signal_15

  • Sobl Master
  • ****
  • Beiträge: 426
    • Rechenzentrum Amper
Re: nicht unten dran-haengen sondern oben drauf-kleben
« Antwort #18 am: 09. April 2009, 09:26:27 »
Guten Morgen,

ich bin jetzt bei meiner ersten version geblieben. sie funktioniert wie geplant und laeuft auch schnell genug.
# build the news-db
echo "<tr><td>$mdate</td><td>$mtime</td><td></td><td><b>$FORM_ueberschrift</b></td></tr>" >> $temp1
echo "<tr><td>      </td><td>      </td><td></td><td>$FORM_nachricht <br><br></td></tr>" >> $temp1
$cat $newsdb >> $temp1
$cat $temp1 > $newsdb

# build the page
/usr/local/bin/cat $newsheader > $newsindex
/usr/local/bin/cat $newsdb >> $newsindex
/usr/local/bin/cat $newsfooter >> $newsindex

das ganze mit 'tail -r' oder reverse, haette gar nicht mal so leicht geklappt da die neuen eintraege mehrzeilig sind und bei einem 'tail -r' dann alles durcheinander gewuerfelt worden waere.

ct,

Offline meik

  • Sobl Bachelor
  • ***
  • Beiträge: 187
Re: nicht unten dran-haengen sondern oben drauf-kleben
« Antwort #19 am: 09. April 2009, 13:53:40 »
Guten Morgen,

ich bin jetzt bei meiner ersten version geblieben. sie funktioniert wie geplant und laeuft auch schnell genug.

Ich bin der festen Überzeugung, dass die meisten vorausschauenden Optimierungen gar nicht nötig sind. ;-)

So ad hoc würden mir noch die folgenden Änderungen einfallen:
Zitat
# build the news-db
echo "<tr><td>$mdate</td><td>$mtime</td><td></td><td><b>$FORM_ueberschrift</b></td></tr>" > $temp1
echo "<tr><td>      </td><td>      </td><td></td><td>$FORM_nachricht <br><br></td></tr>" >> $temp1
$cat $newsdb >> $temp1
mv $temp1 $newsdb

# build the page
/usr/local/bin/cat $newsheader $newsdb $newsfooter > $newsindex

  • Beim ersten echo solltest du das >> durch ein > ersetzen, um das File garantiert neu anzulegen (falls das nicht weiter oben schon passiert)
  • Ein Umbenennen ist schneller als ein Kopieren, das mv kannst du natürlich noch als $mv oder "mv -f" nach Geschmack anpassen.
  • Und ein cat mit drei Parametern ist schneller als dreimal cat mit einem File. :-)

Offline signal_15

  • Sobl Master
  • ****
  • Beiträge: 426
    • Rechenzentrum Amper
Re: nicht unten dran-haengen sondern oben drauf-kleben
« Antwort #20 am: 09. April 2009, 14:01:29 »
temp1=/tmp/temp.$$
somit ist das file garantiert angelegt.

/usr/local/bin/cat $newsheader $newsdb $newsfooter > $newsindex
gefaellt mir gut und werde ich so uebernehmen.

ct,

Offline meik

  • Sobl Bachelor
  • ***
  • Beiträge: 187
Re: nicht unten dran-haengen sondern oben drauf-kleben
« Antwort #21 am: 09. April 2009, 14:57:04 »
temp1=/tmp/temp.$$
somit ist das file garantiert angelegt.
Das ist ja nur der Filename, was passiert, wenn z.B. bei einem lange laufenden System die Pid zum zweiten Mal vergeben wird? Ist zugegebenermassen unwahrscheinlich, aber ich würde dennoch das erste >> in ein > wandeln, damit wird das File entweder neu angelegt oder zumindestens der alte Inhalt gelöscht.

BTW: Wäre auch noch zu überlegen, ob du $temp1 nicht zum Schluß löschst, damit in /tmp nicht zu viel Müll liegen bleibt.

Offline signal_15

  • Sobl Master
  • ****
  • Beiträge: 426
    • Rechenzentrum Amper
Re: nicht unten dran-haengen sondern oben drauf-kleben
« Antwort #22 am: 09. April 2009, 15:02:44 »
am ende des scripts laeuft ein 'rm -r $temp1', somit habe ich das tmp-verzeichnis vor vermuellung verschont und sichergestellt, dass die tmp-datei wieder garantiert leer sein wird.-)

aber ich sehe schon, du willst das erste >> durch ein > unbedingt ersetzt sehen.-) werde ich machen.

ct,

llothar

  • Gast
Re: nicht unten dran-haengen sondern oben drauf-kleben
« Antwort #23 am: 09. April 2009, 16:26:01 »
das ganze mit 'tail -r' oder reverse, haette gar nicht mal so leicht geklappt da die neuen eintraege mehrzeilig sind und bei einem 'tail -r' dann alles durcheinander gewuerfelt worden waere.

Schau dir noch mal meine Lösung an.
Das war mir schon bewusst.

Deshalb must du ja vor dem Anhängen ein reverse auf die Nachricht machen,
denn reverse + reverse ist wie not + not oder Merkel + Steinmüller, alles ist null und leere Luft.

Offline signal_15

  • Sobl Master
  • ****
  • Beiträge: 426
    • Rechenzentrum Amper
Re: nicht unten dran-haengen sondern oben drauf-kleben
« Antwort #24 am: 09. April 2009, 16:32:50 »
@llothar
ich hab gerade eben 'm meik zugesagt seinen vorschlag mit einzubinden. jetzt kommst du wieder mit deinem 'reverse + reverse' daher. da kann dann jeder daher kommen und ne aenderung haben wollen. und am ende erkenne ich mein eigenes skript nicht mehr.-)

mal sehen. im moment gefaellt mir das skript so wie es ist ganz gut. es ist einfach gehalten und wenn ich in zwei jahren rein sehe werde ich auch ohne doku und komentare erkennen koennen was ich mir heute dabei gedacht habe.

aber trotzdem ein dickes danke an alle fuer die brauchbaren vorschlaege.

ct,

sonnenblen.de - Das unabhängige Sun User Forum

Re: nicht unten dran-haengen sondern oben drauf-kleben
« Antwort #24 am: 09. April 2009, 16:32:50 »

linuxdomination

  • Gast
Re: nicht unten dran-haengen sondern oben drauf-kleben
« Antwort #25 am: 05. Mai 2009, 16:11:22 »

"reverse -l" ist jetzt aber ein selbstgeschriebenes Tool.


muaaahahahaa, ist ja toll das du so ein selbstgeschriebenes wasauchimmer hast, wird weder den op noch sonstirgendwen irgendwie weiterbringen *gg*

/schizo off