2009-08-30 8 views
5

J'ai utilisé sed pour un batch ptovess où je ne pouvais pas le faire avec awk. Vould awk l'a fait? Ou est-ce plus une question de choix et d'appeler awk et sed équivalent pour l'utilisation. Ils font tous les deux la recherche commune remplacer similaire avec i/o. Y a-t-il un bon exemple de ce que l'on ne peut faire avec l'un que l'autre peut?Que peut faire ce que sed ne peut pas faire?

Répondre

8

Une différence principale est qu'un programme awk peut maintenir l'état et peut fonctionner en utilisant plusieurs passes sur les mêmes données. Une invocation sed est nécessairement un single-pass sans état car sed (Stream EDitor) est intrinsèquement orienté flux. L'avantage, cependant, est que cela rend sed plus simple et plus approprié pour l'utilisation dans les chaînes de tuyauterie.

+2

Je ne vois pas que sed est "plus approprié pour l'utilisation dans les chaînes de tuyaux" - juste parce que awk peut effectuer plusieurs passes, rien ne vous oblige à le faire réellement. Awk est beaucoup plus simple à utiliser que sed pour de nombreuses tâches liées aux tuyaux (en sélectionnant des champs spécifiques, par exemple). –

+0

@anon Il me semble étrange de voir comment vous transformez ce fil dans des trucs "awk vs sed". Pas utile du tout. – ata

+0

J'ai changé le ceci en la réponse acceptée. Merci! –

2

SED est un éditeur de flux, et n'a donc pas de variables et quelques autres constructions comme AWK. AWK est un langage à part entière.

+0

AWK, contrairement à sed, est-il bon pour trouver et remplacer un code Unicode ou ASCII? donc, traiter tous les caractères de contrôle, y compris la nouvelle ligne, EOF, e.t.c. en tant que binaire? – barlop

2

G'day,

Awk est plus puissant. sed a tendance à être plus limité dans ce qu'il peut faire.

Sed est bon pour les modifications de données en ligne. Il a quelques constructions en boucle simples, les choses habituelles ed/ex/vi regexp et les choses de substitution, les déclarations composées, les décisions, etc. La plupart des gens l'utilisent pour modifier les données canalisées.

Awk est bon pour filtrer ou réorganiser des données. Il est surtout utilisé pour les rapports.

Je suggère de jeter un oeil à l'excellent livre de Dale Dougherty "sed & awk" (sanitised Amazon link). BTW C'est aussi l'une des meilleures explications des expressions rationnelles.

Beaucoup de gens diraient utiliser Perl quand même! (-:

Edit: oublié de dire que la langue awk est tout à fait C comme ce qui est pas surprenant étant donné que le 'k' dans awk signifie Brian Kernighan Oui Ce Brian Kernighan

..!

en outre, seuls sed fonctionne sur les flux de données alors que awk fonctionne sur les flux et les fichiers de données.

HTH

acclamations, sed ne fonctionne que sur les flux de données alors que awk fonctionne sur les flux de données et les fichiers.

+1

GNU sed prend en charge l'édition de fichiers en place. –

+0

Oui.Mais, comme vous le dites, l'option -s est spécifique à GNU. Les implémentations de vanilla sed sont basées sur les flux. C'est tout. –

6

Dans l'original (et toujours le meilleur) livre, The AWK Programming Language, les éléments suivants sont mis en œuvre (entre autres choses):

  • simple assembleur
  • compilateur descente récursive
  • une indexation de texte programme

Essayez de le faire avec sed.

+1

Je pense que c'est une réponse à une question complètement différente. La question est "Qu'est-ce que ce que l'awk ne peut pas faire?", Et non "qu'est-ce que l'awk peut faire?". Juste dire que "awk est meilleur, plus fort, plus rapide" ne répond pas du tout à la question. –

3

La seule chose que je peux penser est que sed peut faire de petits changements en moins de char compte l'awk. Donc, pour des modifications rapides sur un shell live, il est plus rapide de taper.

Questions connexes