GNU/Linux >> Tutoriels Linux >  >> Linux

Utiliser grep contre awk

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

Linux
  1. Correspondance de modèle multiligne à l'aide de Sed, Awk ou Grep ?

  2. Compter le nombre total d'occurrences à l'aide de Grep ?

  3. Trouver le dernier élément d'une ligne à l'aide de Grep ?

  4. Utiliser grep pour rechercher en sens inverse

  5. Comment fusionner deux fichiers avec AWK ?

Comment supprimer des lignes vides dans des fichiers à l'aide de Grep, Sed et Awk

Rechercher du texte dans des fichiers sous Linux à l'aide de grep

Encore un autre résolveur de puzzle Sudoku utilisant AWK

Explication sur la commande awk utilisant ORS, NR, FS, RS

Afficher la correspondance trouvée ou non en utilisant awk

grep pour le terme et exclure un autre terme