- Quelle est la différence entre awk et sed?
- Quel type d'application est le mieux utiliser cas pour les outils sed et awk?
Répondre
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
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.
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
^^ Assez sed. (désolé, je devais) –
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. –
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)
- 1. Quelle est la différence entre sed -e et sed -e
- 2. Quelle est la différence entre dict() et {}?
- 3. Quelle est la différence entre "$^N" et "$ +"?
- 4. Quelle est la différence entre = et: =
- 5. quelle est la différence entre:.! et: r !?
- 6. Quelle est la différence entre ~ et! opérateur?
- 7. Quelle est la différence entre la saturation et la luminosité?
- 8. Quelle est la différence entre ces extraits?
- 9. Quelle est la différence entre applicationDidReceiveMemoryWarning, didReceiveMemoryWarning?
- 10. Quelle est la différence entre ces importations?
- 11. Quelle est la différence entre ces commentaires
- 12. Quelle est la différence entre la sérialisation et l'encodage?
- 13. Quelle est la différence entre la version et l'itération?
- 14. Quelle est la différence entre la programmation parallèle et multicœur?
- 15. Quelle est la différence entre la plate-forme et l'outil?
- 16. Quelle est la différence entre le tuyau et la douille?
- 17. Quelle est la différence entre ces codes?
- 18. Quelle est la différence entre ces conditions?
- 19. Quelle est la différence
- 20. Quelle est la différence entre JAIN SIP et MJSIP?
- 21. Quelle est la différence entre openGL et EAGL/openAL?
- 22. Quelle est la différence entre un nanokernel et un exokernel?
- 23. Quelle est la différence entre UML 2.1.2 et UML 2.2
- 24. Quelle est la différence entre ASP.NET DynamicData et IronSpeed?
- 25. Quelle est la différence entre DTCPing et DTCTester?
- 26. Quelle est la différence entre RMI et Corba?
- 27. Quelle est la différence entre "bool" et "bool?"
- 28. Quelle est la différence entre -ggdb gcc et -g gcc
- 29. Quelle est la différence entre RTN concret et RTN abstrait?
- 30. Quelle est la différence entre% Q et% {} dans ruby?
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