487 votes

Quelle est la différence entre sed et awk ?

  • Quelle est la différence entre awk et sed ?
  • Quel type d'application est le meilleur cas d'utilisation pour les outils sed et awk ?

537voto

Dennis Williamson Points 105818

sed est un éditeur de flux. Il travaille avec des flux de caractères sur une base par ligne. Il dispose d'un langage de programmation primitif qui comprend des boucles de type goto et des conditionnels simples (en plus de la correspondance des motifs et des adresses). Il n'y a essentiellement que deux "variables" : l'espace de motif et l'espace de maintien. La lisibilité des scripts peut être difficile. Les opérations mathématiques sont, au mieux, extraordinairement maladroites.

Il existe plusieurs versions de sed avec différents niveaux de prise en charge des options de la ligne de commande et des caractéristiques du langage.

awk est orienté vers les champs délimités sur une base par ligne. Il possède des constructions de programmation beaucoup plus robustes, notamment if / else , while , do / while y for (style C et itération de tableau). Il existe un support complet pour les variables et les tableaux associatifs unidimensionnels, ainsi que pour les tableaux multidimensionnels (IMO). Les opérations mathématiques ressemblent à celles du C. Il dispose de printf et fonctions. Le "K" de "AWK" signifie "*". K *ernighan" comme dans "Kernighan et Ritchie" du célèbre livre "C Programming Language" (sans oublier * A *ho et * W *einberger). On pourrait concevoir d'écrire un détecteur de plagiat académique en utilisant awk .

GNU awk ( gawk ) possède de nombreuses extensions, y compris de véritables tableaux multidimensionnels dans la dernière version. Il existe d'autres variantes de awk y compris mawk y nawk .

Les deux programmes utilisent des expressions régulières pour sélectionner et traiter le texte.

J'aurais tendance à utiliser sed lorsqu'il existe des modèles dans le texte. Par exemple, vous pouvez remplacer tous les nombres négatifs dans un texte qui sont sous la forme "signe moins suivi d'une séquence de chiffres" (par exemple "-231,45") par la forme "parenthèses de comptable" (par exemple "(231,45)") en utilisant cette méthode (qui peut être améliorée) :

sed 's/-\([0-9.]\+\)/(\1)/g' inputfile

J'utiliserais awk lorsque le texte ressemble plus à des lignes et des colonnes ou, comme awk les appelle "enregistrements" et "champs". Si je devais effectuer une opération similaire à celle décrite ci-dessus, mais uniquement sur le troisième champ d'un simple fichier délimité par des virgules, je pourrais faire quelque chose comme suit :

awk -F, 'BEGIN {OFS = ","} {gsub("-([0-9.]+)", "(" substr($3, 2) ")", $3); print}' inputfile

Bien entendu, il ne s'agit là que d'exemples très simples qui n'illustrent pas l'éventail complet des possibilités offertes par chacun d'eux.

121voto

ghostdog74 Points 86060

1) Quelle est la différence entre awk et sed ?

Les deux sont des outils qui transforment le texte. MAIS l'awk peut faire plus de choses que de simplement manipuler du texte. C'est un langage de programmation à part entière avec la plupart des choses que vous apprenez en programmation, comme les tableaux, les boucles, le contrôle de flux if/else, etc. Vous pouvez aussi "programmer" en sed, mais vous ne voudrez pas maintenir le code écrit dedans.

2) Quels types d'applications sont les meilleurs cas d'utilisation des outils sed et awk ?

Conclusion : Utilisez sed pour un traitement de texte très simple. Pour tout ce qui est au-delà, awk est meilleur. En fait, vous pouvez vous débarrasser complètement de sed et utiliser simplement awk. Puisque leurs fonctions se chevauchent et que l'awk peut faire plus, utilisez simplement l'awk. Vous réduirez également votre courbe d'apprentissage.

49voto

hek2mgl Points 38787

Les deux outils sont destinés à travailler avec du texte et il existe des tâches pour lesquelles les deux outils peuvent être utilisés.

Pour moi, la règle pour les séparer est la suivante : Utilisez sed pour automatiser les tâches que vous feriez autrement manuellement dans un éditeur de texte. C'est pourquoi il est appelé stream éditeur . (Vous pouvez utiliser les mêmes commandes pour éditer du texte dans vim). Utilisez awk si vous voulez analyser du texte, c'est-à-dire compter des champs, calculer des totaux, extraire et réorganiser des structures, etc.

Vous ne devez pas non plus oublier grep . Utilisez grep si vous voulez seulement rechercher/extraire quelque chose dans un texte (fichier)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X