- Quelle est la difference entre awk et sed?
- Quel type d'application sont les meilleurs cas d'utilisation pour les outils sed et awk?
Réponses:
sed
est un éditeur de flux. Il fonctionne avec des flux de caractères ligne par ligne. Il a un langage de programmation primitif qui comprend des boucles de style goto et des conditions simples (en plus de la correspondance de motifs et de la correspondance d'adresses). Il n'y a essentiellement que deux "variables": l'espace modèle et l'espace d'attente. La lisibilité des scripts peut être difficile. Les opérations mathématiques sont au mieux extraordinairement maladroites.
Il existe différentes versions de sed
avec différents niveaux de prise en charge des options de ligne de commande et des fonctionnalités linguistiques.
awk
est orienté vers des champs délimités ligne par ligne. Il a beaucoup plus des structures de programmation robuste , y compris if
/ else
, while
, do
/ while
et for
(C-style et itération de tableau). Il existe une prise en charge complète des variables et des tableaux associatifs à une dimension plus (IMO) des tableaux multidimensionnels kludgey. Les opérations mathématiques ressemblent à celles de C. Elle a printf
et fonctionne. Le "K" dans "AWK" signifie " K ernighan" comme dans "Kernighan and Ritchie" du livre "C Programming Language" (sans oublier A ho et W einberger). On pourrait imaginer écrire un détecteur de plagiat académique en utilisant awk
.
GNU awk
( gawk
) possède de nombreuses extensions, y compris de vrais tableaux multidimensionnels dans la dernière version. Il existe d'autres variantes d' awk
inclure mawk
et nawk
.
Les deux programmes utilisent des expressions régulières pour sélectionner et traiter du texte.
J'aurais tendance à utiliser sed
là où il y a des motifs dans le texte. Par exemple, vous pouvez remplacer tous les nombres négatifs dans certains textes sous la forme "signe moins suivi d'une séquence de chiffres" (par exemple "-231.45") par le formulaire "crochets du comptable" (par exemple "(231.45)" ) en utilisant ceci (qui peut encore être amélioré):
sed 's/-\([0-9.]\+\)/(\1)/g' inputfile
J'utiliserais awk
lorsque le texte ressemble plus à des lignes et des colonnes ou, comme il se awk
réfère à eux "enregistrements" et "champs". Si je devais faire une opération similaire à celle ci-dessus, mais uniquement sur le troisième champ d'un fichier délimité par des virgules, je pourrais faire quelque chose comme:
awk -F, 'BEGIN {OFS = ","} {gsub("-([0-9.]+)", "(" substr($3, 2) ")", $3); print}' inputfile
Bien sûr, ce ne sont que des exemples très simples qui n'illustrent pas la gamme complète des capacités que chacun a à offrir.
sed
: sed.sourceforge.net/#scripts
1) Quelle est la différence entre awk et sed?
Les deux sont des outils qui transforment le texte. MAIS awk peut faire plus que simplement manipuler du texte. C'est un langage de programmation en lui-même 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 également "programmer" dans sed, mais vous ne voudrez pas conserver le code écrit dedans. .
2) Quel type d'application sont les meilleurs cas d'utilisation pour les outils sed et awk?
Conclusion: utilisez sed pour une analyse de texte très simple. Au-delà de ça, awk c'est mieux. En fait, vous pouvez complètement abandonner sed et simplement utiliser awk. Comme leurs fonctions se chevauchent et awk peut faire plus, utilisez simplement awk. Vous réduirez également votre courbe d'apprentissage.
sed
, 's/search/replace'
est beaucoup plus facile à taper que awk
la syntaxe et c'est ce dont vous avez besoin la plupart du temps.
Les deux outils sont destinés à fonctionner 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: Utilisez sed
pour automatiser manuellement les tâches que vous feriez autrement dans un éditeur de texte. C'est pourquoi il est appelé éditeur de flux . (Vous pouvez utiliser les mêmes commandes pour modifier le texte dans vim). À utiliser awk
si vous souhaitez analyser du texte, c'est-à-dire compter des champs, calculer des totaux, extraire et réorganiser des structures, etc.
N'oubliez pas non plus grep
. A utiliser grep
si vous souhaitez uniquement rechercher / extraire quelque chose dans un texte (fichier)