- 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 ?
Réponses
Trop de publicités?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.
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.
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)