Bei sehr großen Dateien ist die Verwendung von sort
ziemlich langsam. In diesem Fall ist es besser, so etwas wie awk zu verwenden, die nur einen Durchlauf benötigt:
$ awk -F= 'BEGIN { max = -inf } { if ($3 > max) { max = $3; line = $0 } } END { print line }' test.txt
log2c=3.0 rate=89.5039
Die Zeit Komplexität dieser Operation ist linear, während der Raum Komplexität konstant ist (und klein). Erläuterung:
awk -F= '...' test.txt
: Invoke awk auf test.txt, mit =
als Feldtrenn
BEGIN { max = -inf }
: Initialisiere max
zu etwas, das immer kleiner sein wird als das, was Sie lesen.
{ if ($3 > max) { max = $3; line = $0; } }
: Für jede Eingabezeile, wenn max
kleiner als der Wert des dritten Feldes ($3
), dann ist es zu aktualisieren und den Wert der aktuellen Zeile erinnern ($0
)
END { print line }
: Schließlich, drucken Sie die Linie, die wir erinnerte sich beim Lesen der Eingabe.
Gibt es einen Grund, warum Sie dies in Awk nicht tun? Dies sollte nach nur einem kurzen Einführungs-Tutorial trivial sein. – tripleee
devnulls Lösung funktioniert perfekt in bash. Der Name meiner Eingabedatei stammt jedoch von einem abrufbaren $ filename. Also setze ich diese Worte in echo "..." | Sch. Verzeih mir, ich bin ein Neuling. – Eman