Question Quelle est la différence entre sed et awk? [fermé]


  • Quelle est la difference entre awk et sed?
  • Quel type d'application est le meilleur usage étuis pour outils sed et awk?

418
2017-10-27 16:37


origine


Réponses:


sed est un éditeur de flux. Il fonctionne avec des flux de caractères sur une base par ligne. Il a un langage de programmation primitif qui inclut des boucles de style goto et des conditions simples (en plus de la correspondance de modèle et de la correspondance d'adresse). Il n'y a essentiellement que deux "variables": l'espace des motifs et l'espace de maintien. La lisibilité des scripts peut s'avérer difficile. Les opérations mathématiques sont extraordinairement maladroites au mieux.

Il existe différentes versions de sed avec différents niveaux de support pour les options de ligne de commande et les fonctionnalités de langue.

awk est orienté vers des champs délimités sur une base par ligne. Il a des constructions de programmation beaucoup plus robustes, y compris if/else, while, do/while et for (Style C et itération de tableau). Il existe une prise en charge complète des variables et des tableaux associatifs à une dimension, plus les tableaux multidimensionnels kludgey (IMO). Les opérations mathématiques ressemblent à celles de C. Il a printf et fonctions. Le "K" dans "AWK" signifie ""Kernighan "comme dans" Kernighan and Ritchie "du livre" C Programming Language "renommée (ne pas oublier UNEho et Weinberger). On pourrait concevoir écrire un détecteur de plagiat académique en utilisant awk.

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

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

J'aurais tendance à utiliser sed où il y a des motifs dans le texte. Par exemple, vous pouvez remplacer tous les nombres négatifs dans un texte sous la forme "signe moins suivi d'une séquence de chiffres" (par exemple "-231.45") avec le formulaire "entre parenthèses" (par exemple "(231.45)" ) en utilisant ceci (qui peut être amélioré):

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

j'utiliserais awk quand le texte ressemble plus à des lignes et colonnes ou, comme awk se réfère à eux "records" et "champs". Si je devais faire une opération similaire à celle ci-dessus, mais uniquement sur le troisième champ dans un simple 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 toute la gamme de fonctionnalités que chacun peut offrir.


476
2017-10-27 17:53



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

Les deux sont des outils qui transforment le texte. Mais awk peut faire plus de choses que de 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" dans sed, mais vous ne voudrez pas conserver le code écrit .

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 tout ça, awk c'est mieux. En fait, vous pouvez totalement abandonner et utiliser simplement awk. Comme leurs fonctions se chevauchent et que awk peut faire plus, il suffit d'utiliser awk. Vous allez également réduire votre courbe d'apprentissage.


107
2017-10-27 17:40



Les deux outils sont conçus pour fonctionner avec du texte et il existe des tâches pour lesquelles les deux outils peuvent être utilisés.

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

Aussi, vous ne devriez pas oublier grep. Utilisation grep si vous voulez seulement rechercher / extraire quelque chose dans un texte (fichier)


35
2018-01-25 09:33