GNU/Linux >> Linux Esercitazione >  >> Linux

Usando grep vs awk

grep sarà molto probabilmente più veloce:

# 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 è un linguaggio di programmazione interpretato, dove as grep è un programma in codice c compilato (che è inoltre ottimizzato per trovare schemi nei file).

(Nota:ho eseguito entrambi i comandi due volte in modo che la memorizzazione nella cache non distorcesse potenzialmente i risultati)

Maggiori dettagli sulle lingue interpretate su wikipedia.

Come Stephane ha giustamente sottolineato nei commenti, il tuo chilometraggio può variare a causa dell'implementazione di grep e awk che usi, del sistema operativo su cui si trova e del set di caratteri che stai elaborando.


Utilizzare lo strumento più specifico ed espressivo. È probabile che lo strumento che meglio si adatta al tuo caso d'uso sia il più veloce.

Come guida approssimativa:

  • cercare righe corrispondenti a una sottostringa o regexp? Usa grep.
  • selezionare determinate colonne da un file delimitato semplicemente? Usa taglio.
  • eseguire sostituzioni basate su schemi o... altre cose che sed può ragionevolmente fare? Usa sed.
  • hai bisogno di una combinazione dei 3 precedenti, o della formattazione printf, o di loop e rami generici? Usa awk.

Quando cerchi solo stringhe e la velocità è importante, dovresti quasi sempre usare grep . È ordini di grandezza più veloce di awk quando si tratta solo di ricerche grossolane.

fonte Le differenze funzionali e prestazionali di sed, awk e altre utilità di analisi Unix

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. Corrispondenza di pattern multilinea utilizzando Sed, Awk o Grep?

  2. Contare il numero totale di occorrenze utilizzando Grep?

  3. Come unire due file usando AWK?

  4. Trovare file eseguibili usando ls e grep

  5. Come rimuovere il prefisso di una parola usando grep?

Come eliminare le righe vuote nei file utilizzando Grep, Sed e Awk

Trova testo nei file su Linux usando grep

Cattura gruppi con Awk o Grep?

Trovare l'ultimo elemento di una riga usando Grep?

Ancora un altro risolutore di puzzle di Sudoku che utilizza AWK

Visualizza corrispondenza trovata o non utilizzando awk