Bonjour, Je suis tout nouveau ici sur ces forums, je me présente je suis étudiant (bref, de retour aux études après 20+ sur le marché du travail) et je fait présentement un cour sur la gestion et sécurité des réseaux.
Evidemment ce n'est pas chose aisé mais je me débrouille assez bien en général.
Bon, présentement je travaille à approfondir mes connaissances qui sont très de base sur AWK (dans CentOS 6.6 si ca peut changer quelque chose) et j'essaie d'établir dans un petit programme awk une facon de faire les choses suivantes:
Dans un très long fichier, compter la longueur de lettres de tout les mots qu'il contient (il y en a un par ligne apres que je l'ai nettoyé) et afficher le résultat de la facon suivante (ou similaire)
Longueur---------NBRE de mots
4 203
5 300
6 460
7 640
etc
J'ai fait plusieurs ébauches en utilisant print length($0)) mais je n'arrive pas a faire comptabiliser et afficher comme ci haut.
je demarre mon script comme cela
awk -f monfichier.awk fichier_a_analyser.txt
Merci à l'avance.
# tuyaux
Posté par GG (site web personnel) . Évalué à 3.
voir gestion des tableaux
Pourquoi bloquer la publicité et les traqueurs : https://greboca.com/Pourquoi-bloquer-la-publicite-et-les-traqueurs.html
# gestion des tableaux?
Posté par Braveorc . Évalué à 1.
Merci de la réponse mais pourriez vous m'indiquer où est cette gestion des tableaux? Je ne la trouve pas sur ces forums.
J'ai réellement besoin d'un coup de main! Merci.
[^] # Re: gestion des tableaux?
Posté par gUI (Mastodon) . Évalué à 2.
je te propose le parcours suivant, étape par étape :
voilà, je ne connais pas plus que ça AWK, mais je pense que tu dois pouvoir implémenter ça à pas très cher :)
En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
# integrer sort et uniq dans awk?
Posté par Braveorc . Évalué à 1.
En fait c'est que j'essaie d'integrer sort -n et uniq -c dans awk mais ca semble impossible.
[^] # Re: integrer sort et uniq dans awk?
Posté par gaaaaaAab . Évalué à 2.
ça serait peut-être possible en utilisant la fonction system() de awk, mais je déconseille très fortement (c'est pas portable, et puis il y a mieux). En shell, quand on veut composer différents utilitaires, on utilise le caractère | qui redirige la sortie de la commande le précédent sur l'entrée de la commande suivante. Exemple :
Vu que ça fait partie des mécanismes de base quand on travaille en ligne de commande, je t'invite à jeter un oeil sur un tutoriel de shell.
[^] # Re: integrer sort et uniq dans awk?
Posté par JJD . Évalué à 2.
Je ne comprends pas bien ce que tu entends par "intégrer" sort et uniq dans awk…
S'il s'agit d'appeler ces commandes depuis awk, ça ne présente pas un grand intérêt : autant faire un pipe avec "| sort | uniq -c".
En revanche, il est possible de n'utiliser que des commandes awk sans aucun appel à des binaires externes (ce qui est tout de même plus intéressant) en utilisant un tableau (comme indiqué plus haut) dans lequel l'indice est la longueur de la chaîne et la valeur le nombre d’occurrences. Ça pourrait donner un script awk de ce genre là:
Cela semble correspondre à ce que tu veux faire mais je ne garantis pas la compatibilité avec toutes les versions de awk (sur un Linux de moins de 10 ça devrait aller).
[^] # Re: integrer sort et uniq dans awk?
Posté par gaaaaaAab . Évalué à 2.
c'est une affirmation générale qui n'est pas forcément vraie. Selon quel(s) critère(s) c'est mieux ?
En terme de temps de développement, c'est clairement moins bien, vu que sort | uniq, c'est immédiat pour à peu près tout le monde sur ce forum.
En terme de performances en temps de traitement, on ne peut jamais dire grand chose sans mesurer sur des données correspondant au cas réel. Je pense qu'une version tout en awk sera plus performante si on doit traiter un très grand nombre de fichier (parce qu'on économise des forks) mais pour le reste … (autre volumétrie, consommation mémoire, …)
Dans l'absolu, entre deux solutions techniquement satisfaisantes, on va choisir en fonction des compromis fait par chaque version par rapport aux besoins qu'on a. Dans l'absolu, il y existe rarement une solution qui soit meilleure dans tous les cas.
[^] # Re: integrer sort et uniq dans awk?
Posté par JJD . Évalué à 1.
Je pense qu'il faut replacer ma remarque dans son contexte (et ce n'est donc pas une affirmation générale ;-)). D'ailleurs, pour ce type de besoin, je n'aurais personnellement pas opté pour une solution uniquement en awk (peut-être pour une question d'efficacité/rapidité de la solution, mais surtout pour des tas de raisons complètement subjectives).
Mais ici, il s'agit de répondre à Braveorc qui, dans son post initial, indique que son objectif premier est de développer ses compétences sous awk. Dans ce cadre, il me semble donc bien plus intéressant de proposer une solution qui ne fait pas appel à des binaires externes…
[^] # Re: integrer sort et uniq dans awk?
Posté par gaaaaaAab . Évalué à 2.
effectivement, j'avais un peu survolé ça :
mes confuses :)
# La donée
Posté par Michaël (site web personnel) . Évalué à 2.
La donnée que tu veux affichée est un dictionnaire
longueur de mot -> nombre de mots de cette longueur
. Comment est représentée cette donnée dans ton programme?Pour une référence (en anglais) regarde dans Le Grymoire. C'est une des meilleures références qui soit pour apprendre les outils Unix en général. Montre-nous ton code si tu a des questions, c'est plus facile pour t'aider!
# clarification
Posté par Braveorc . Évalué à 1.
Effectivement mon but est de ne pas utiliser de pipe avec sort et uniq mais de trouver une façon équivalente et même meilleure directement dans awk. Merci des conseil je vais essayer ce que vous me proposez.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.