grep sera probablement plus rapide :
# 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 est un langage de programmation interprété, tandis que grep est un programme compilé en code C (qui est en outre optimisé pour rechercher des modèles dans les fichiers).
(Remarque - j'ai exécuté les deux commandes deux fois afin que la mise en cache ne fausse pas potentiellement les résultats)
Plus de détails sur les langues interprétées sur wikipedia.
Comme Stéphane l'a souligné à juste titre dans les commentaires, votre kilométrage peut varier en raison de l'implémentation du grep et de l'awk que vous utilisez, du système d'exploitation sur lequel il se trouve et du jeu de caractères que vous traitez.
Utilisez l'outil le plus spécifique et le plus expressif. L'outil qui correspond le mieux à votre cas d'utilisation sera probablement le plus rapide.
À titre indicatif :
- vous recherchez des lignes correspondant à une sous-chaîne ou une expression régulière ? Utilisez grep.
- sélectionner certaines colonnes d'un fichier simplement délimité ? Utilisez la coupe.
- effectuer des substitutions basées sur des modèles ou ... d'autres choses que sed peut raisonnablement faire ? Utilisez sed.
- besoin d'une combinaison des 3 éléments ci-dessus, ou d'un format printf, ou de boucles et de branches à usage général ? Utilisez awk.
Lorsque vous recherchez uniquement des chaînes et que la vitesse compte, vous devez presque toujours utiliser grep
. C'est des ordres de grandeur plus rapides que awk
lorsqu'il s'agit de recherche grossière.
source Les différences fonctionnelles et de performances entre sed, awk et d'autres utilitaires d'analyse 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