rendegast hat geschrieben:
$ time { sort -u zeilen | wc -l ; }
289
real 0m2.185s
user 0m3.496s
sys 0m0.224s
1sec weniger, immer noch langsamer als awk.
Das war zu erwarten, denn sort kann nun alle mehrfachen Zeilen ignorieren, wodurch weniger Daten gespeichert werden mussen. Und der uniq-Schritt passiert schon beim Aufnehmen der Zeile. Im Vergleich zu awk ist `sort -u' langsamer, da halt immer noch sortiert wird.
Deine weiteren Messergebnisse entsprechen auch meinen Erwartungen: Bei den beiden sort-Varianten macht es einen Unterschied ob die Eingangsdaten schon sortiert sind oder nicht. Das laesst auf einen Sortieralgorithmus schliessen, der unterschiedliche Best-, Average- und Worst-Cases hat (wie Quicksort, der vermutlich verwendet wird). Beim awk-Ansatz macht es keinen Unterschied, da hierbei nicht sortiert wird. Damit ist die Reihenfolge der Eingangsdaten irrelevant.
Bleibt die (rhetorische) Frage, was kann ich! eher?
awk intensiver lernen (der Thread gehört ja dazu) und merken/nachvollziehen,
oder mir irgendwie mit 'sort -u > uniq-Liste' / 'grep -f uniq-Liste ursprungsdatei' behelfen?
('egrep -f' ist seeeehr langsam, für 100 Zeilen Log sollte es aber ausreichen).
Das Entweder-oder kann ich dir nicht beantworten; ich kann dich nur zum Sowohl-als-auch motivieren.
Awk wird viel zu sehr totgesagt (im Gegensatz zu sed, uebrigens). Ich sehe in awk aber eine Sprache mit einem enorm guten Preis-Leistungs-Verhaeltnis. (Man kann sie innerhalb eines Tages lernen wenn man C und sed schon kennt.) In dieser Hinsicht kann Perl IMO nicht mithalten, wenn das auch in anderen Gebieten seine Staerken hat. Ich finde awk auch deutlich einfach als die Shell, da es aus einem Guss ist, was man bei der Shell kaum vertreten kann. (Ohne mich darauf festlegen lassen zu wollen, weil man sowas ja doch nicht entscheiden kann, wuerde ich awk durchaus als meine Lieblingssprache bezeichnen.)