Erfassen eines bestimmten Musters awk
und grep
kann verwendet werden. Warum sollten wir eins übereinander verwenden? Was ist schneller und warum?
Wenn ich eine Protokolldatei hätte und ein bestimmtes Muster aufnehmen möchte, könnte ich eine der folgenden Aktionen ausführen
awk '/pattern/' /var/log/messages
oder
grep 'pattern' /var/log/messages
Ich habe noch kein Benchmarking durchgeführt, also würde ich es nicht wissen. Kann das jemand ausarbeiten? Es ist großartig, das Innenleben dieser beiden Werkzeuge zu kennen.
linux
awk
grep
performance
holasz
quelle
quelle
time
Befehl angegeben werden, wie lange die Ausführung des Befehls dauert. Bsp .:time ls -l
.Antworten:
grep wird höchstwahrscheinlich schneller sein:
awk ist eine interpretierte Programmiersprache, in der grep ein kompiliertes C-Code-Programm ist (das zusätzlich zum Auffinden von Mustern in Dateien optimiert ist).
(Hinweis - Ich habe beide Befehle zweimal ausgeführt, damit das Caching die Ergebnisse möglicherweise nicht verzerrt.)
Weitere Details zu interpretierten Sprachen auf Wikipedia.
Wie Stephane in seinen Kommentaren zu Recht ausgeführt hat, kann Ihr Kilometerstand aufgrund der Implementierung des von Ihnen verwendeten grep und awk, des Betriebssystems und des von Ihnen verarbeiteten Zeichensatzes variieren.
quelle
Verwenden Sie das spezifischste und aussagekräftigste Werkzeug. Das für Ihren Anwendungsfall am besten geeignete Tool ist wahrscheinlich das schnellste.
Als grobe Richtlinie:
quelle
perl
stattawk
. wenn du etwas komplizierteres als grep / cut / sed brauchst, dann sind die Chancen groß, dass es nicht ausreicht und du brauchst etwas "Wenn Sie nur nach Zeichenfolgen suchen und es auf die Geschwindigkeit ankommt, sollten Sie fast immer verwenden
grep
. Es ist um Größenordnungen schneller alsawk
wenn es nur um grobe Suche geht.source Die Funktions- und Leistungsunterschiede von sed, awk und anderen Unix-Parsing-Dienstprogrammen
quelle
awk ... has PCRE matching for regular expressions
.Ich stimme zwar zu, dass YMMV theoretisch
grep
schneller sein sollte alsawk
in der Praxis, da dies in hohem Maße von der von Ihnen verwendeten Implementierung abhängt.Hier wird das grep und awk von busybox 1.20.0 verglichen, GNU grep 2.14, mawk 1.3.3, GNU awk 4.0.1 unter Debian / Linux 7.0 amd64 (mit glibc 2.17) in einem UTF-8-Gebietsschema auf einer 240MB-Datei mit 2,5M Zeilen Nur ASCII-Zeichen.
Im C-Gebietsschema erhält nur GNU grep einen signifikanten Schub und wird schneller als
mawk
.Der Datensatz und die Art des regulären Ausdrucks können ebenfalls einen großen Unterschied machen. Für reguläre Ausdrücke
awk
sollten verglichen werden mit,grep -E
daawk
reguläre Ausdrücke erweiterte REs sind.Dieser Datensatz ist
awk
möglicherweise schneller alsgrep
auf Systemen mit vielbeschäftigter Box oder auf Systemen, auf denenmawk
die Standardeinstellungawk
und das Standardgebietsschema UTF-8-basiert ist (IIRC war früher in Ubuntu der Fall).quelle
Kurz gesagt,
grep
macht eine Sache nur so viele andere UNIX-Tools, und das stimmt mit einer Linie mit dem gegebenen Muster überein, und das macht es auch gut. Auf der anderen Seiteawk
ist es ein komplexeres Tool, da es eine vollständige Programmiersprache ist, die durch den POSIX-Standard definiert ist und typische Merkmale wie Variablen, Arrays, Ausdrücke, Funktionen oder Steueranweisungen für das Scannen und Verarbeiten von Mustern enthält.Meiner Meinung nach hängt es von der Implementierung ab, wie beide Tools bei der Mustererkennung funktionieren, und von der Größe einiger Eingaben, die Sie verarbeiten möchten. Ich würde erwarten, dass grep normalerweise effizienter ist als awk, da es nur das Matching tut. Sie können jedoch keinen einfachen Code mit grep schreiben, um komplexere Aufgaben wie die Weiterverarbeitung übereinstimmender Datensätze, die Berechnung oder das Drucken von Ergebnissen ohne Verwendung anderer Tools auszuführen.
quelle