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