GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Verwenden von grep vs. awk

grep wird höchstwahrscheinlich schneller sein:

# time awk '/USAGE/' imapd.log.1 | wc -l
73832

real    0m2.756s
user    0m2.740s
sys     0m0.020s

# time grep 'USAGE' imapd.log.1 | wc -l
73832

real    0m0.110s
user    0m0.100s
sys     0m0.030s

awk ist eine interpretierte Programmiersprache, während grep ein kompiliertes C-Code-Programm ist (das zusätzlich darauf optimiert ist, Muster in Dateien zu finden).

(Anmerkung:Ich habe beide Befehle zweimal ausgeführt, damit das Caching die Ergebnisse nicht potenziell verfälscht)

Weitere Details zu interpretierten Sprachen auf Wikipedia.

Wie Stephane in Kommentaren zu Recht darauf hingewiesen hat, kann Ihre Laufleistung aufgrund der Implementierung von grep und awk, die Sie verwenden, des Betriebssystems, auf dem es läuft, und des Zeichensatzes, den Sie verarbeiten, variieren.


Verwenden Sie das spezifischste und ausdrucksstärkste Werkzeug. Das Tool, das am besten zu Ihrem Anwendungsfall passt, ist wahrscheinlich das schnellste.

Als grobe Richtlinie:

  • Suchen Sie nach Zeilen, die mit einer Teilzeichenfolge oder einem regulären Ausdruck übereinstimmen? Verwenden Sie grep.
  • Auswahl bestimmter Spalten aus einer einfach getrennten Datei? Verwenden Sie cut.
  • Durchführen von musterbasierten Substitutionen oder ... andere Dinge, die sed vernünftigerweise tun kann? Verwenden Sie sed.
  • Benötigen Sie eine Kombination der oben genannten 3 oder eine printf-Formatierung oder Schleifen und Verzweigungen für allgemeine Zwecke? Verwenden Sie awk.

Wenn nur nach Zeichenfolgen gesucht wird und es auf Geschwindigkeit ankommt, sollten Sie fast immer grep verwenden . Es ist um Größenordnungen schneller als awk wenn es um grobe Suche geht.

source Die Funktions- und Leistungsunterschiede von sed, awk und anderen Unix-Parsing-Utilities

UTILITY    OPERATION TYPE      EXECUTION TIME     CHARACTERS PROCESSED PER SECOND
                               (10 ITERATIONS)
-------    --------------      ---------------    -------------------------------
grep       search only         41 sec.            489.3 million
sed        search & replace    4 min. 4 sec.      82.1 million
awk        search & replace    4 min. 46 sec.     69.8 million
Python     search & replace    4 min. 50 sec.     69.0 million
PHP        search & replace    15 min. 44 sec.    21.2 million

Linux
  1. Mehrzeiliger Musterabgleich mit Sed, Awk oder Grep?

  2. Letztes Element in einer Zeile mit Grep finden?

  3. Verwenden Sie grep, um rückwärts zu suchen

  4. Wie kann man zwei Dateien mit AWK zusammenführen?

  5. Verwendung von awk mit Spaltenwertbedingungen

So löschen Sie leere Zeilen in Dateien mit Grep, Sed und Awk

Finden Sie Text in Dateien unter Linux mit grep

Zählen Sie die Gesamtzahl der Vorkommen mit Grep?

Gruppen mit Awk oder Grep erfassen?

Noch ein weiterer Sudoku-Puzzle-Löser mit AWK

grep, um Daten in der ersten Spalte zu suchen