Question

  • Quelle est la différence entre awk et sed?
  • Quel type d'application est la meilleure utilisation cas pour les outils sed et awk?
Était-ce utile?

La solution

sed est un éditeur de flux. Il fonctionne avec des flux de caractères ligne par ligne. Il possède 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 correspondance). Il n'y a essentiellement que deux "variables": espace de modèle et espace de maintien. 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 les champs délimités ligne par ligne. Il a des constructions de programmation beaucoup plus robustes comprenant si / sinon , tant que , font / tant que et pour (itération de style C et tableau). La prise en charge complète des variables et des tableaux associatifs à une dimension et des tableaux multidimensionnels kludgey (IMO). Les opérations mathématiques ressemblent à celles de C. Il a printf et des 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 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 , notamment mawk et nawk .

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

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

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

Je voudrais utiliser awk lorsque le texte ressemble davantage à des lignes et à des colonnes ou, comme awk s'y réfère "& records; 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 du genre:

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 fonctionnalités offertes par chacun.

Autres conseils

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

Ce sont deux outils qui transforment le texte. MAIS awk peut faire plus que 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 si / d’autre, etc. Vous pouvez "programmer". dans sed également, mais vous ne voudrez pas conserver le code qui y est écrit.

2) Quels types d'applications 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à, awk est meilleur. En fait, vous pouvez laisser tomber sed et simplement utiliser awk. Puisque leurs fonctions se chevauchent et que awk peut faire plus, utilisez simplement awk. Vous réduirez également votre courbe d'apprentissage.

Les deux outils sont conçus pour fonctionner avec du texte. Ils peuvent également ê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 feriez autrement dans un éditeur de texte. C’est pourquoi il s’appelle stream éditeur . (Vous pouvez utiliser les mêmes commandes pour modifier du texte dans vim). Utilisez awk si vous souhaitez analyser du texte, c'est-à-dire compter les champs, calculer les totaux, extraire et réorganiser les structures, etc.

N'oubliez pas non plus grep . Utilisez grep si vous souhaitez uniquement rechercher / extraire quelque chose dans un texte (fichier)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top