2009-10-27 9 views
389
  • Quelle est la différence entre awk et sed?
  • Quel type d'application est le mieux utiliser cas pour les outils sed et awk?
+1

Un QA lié sur unix.stackexchange: [Existe-t-il un tutoriel de base pour grep, awk et sed?] (Http: //unix.stackexchange .com/questions/2434/est-il-un-basic-tutoriel-pour-grep-awk-et-sed) – Dani

Répondre

438

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 être difficile. Les opérations mathématiques sont extraordinairement maladroites au mieux.

Il existe plusieurs versions de sed avec différents niveaux de prise en charge des options de ligne de commande et des fonctionnalités de langue.

awk est orienté vers des champs délimités 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 un support complet pour les variables et les tableaux associatifs unidimensionnels plus (IMO) kludgey tableaux multidimensionnels. Les opérations mathématiques ressemblent à celles de C. Il a printf et ses fonctions. Le "K" dans "AWK" signifie "K ernighan" comme dans "Kernighan et Ritchie" du livre "C Programming Language" renommée (ne pas oublier A ho et W Einberger). On pourrait concevoir écrire un détecteur de plagiat académique en utilisant awk. GNU 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, y compris 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 d'un texte qui se présente sous la forme "signe moins suivi d'une séquence de chiffres" (par exemple "-231.45") avec le masque "parenthèses" (par exemple "(231.45) ") en utilisant ce (qui a de la place pour l'amélioration):

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

Je voudrais utiliser awk lorsque le texte ressemble plus à des lignes et des colonnes ou, comme awk désigne les « documents » et « champs » Si. J'allais faire une opération similaire à celle ci-dessus, mais seulement 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 la gamme complète de capacités que chacun a à offrir

+3

Merci Dennis pour l'explication rapide. – Rachel

+3

Pour voir quelques exemples de repousser les limites de 'sed': http://sed.sourceforge.net/#scripts –

+3

Merci Dennis d'avoir fourni le lien vers des exemples sed – Rachel

94

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 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 aussi programmer dans sed, mais vous ne voulez pas conserver le code .

2) Quel type d'application sont les meilleurs cas d'utilisation pour les outils sed et awk? Conclusion: Utilisez sed pour l'analyse de texte très simple. Au-delà de tout ça, awk c'est mieux. En fait, vous pouvez complètement abandonner Sed et utiliser 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.

+5

Bon point sur la courbe d'apprentissage .. trop d'outils peuvent se mélanger .. donc je préférerais apprendre le grep et awk seulement .. laisse oublier sed :) – Outlier

+104

^^ Assez sed. (désolé, je devais) –

+3

Je trouve sed est beaucoup plus facile à apprendre si, donc vous devez en tenir compte. Au fur et à mesure que vous apprenez à maîtriser awk, il peut être utile d'apprendre rapidement sed pour pouvoir l'utiliser plus rapidement pour des choses que vous ne savez pas encore faire dans awk. –

30

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 pour les séparer est la suivante: Utilisez sed pour automatiser manuellement les tâches que vous auriez faites dans un éditeur de texte. C'est pourquoi il est appelé flux éditeur. (Vous pouvez utiliser les mêmes commandes pour modifier le texte dans vim). Utilisez awk si vous voulez analyser le texte, ce qui signifie compter les champs, calculer les totaux, extraire et réorganiser les structures, etc.

De plus, vous ne devriez pas oublier grep. Utilisez grep si vous voulez seulement chercher/extraire quelque chose dans un texte (fichier)

Questions connexes