Bonjour,
J'ai récemment appris à faire un peu de parsing de fichiers pour manipuler un fichier texte et enlever les éléments que je souhaite garder etc dans le projet d'un stage de recherche. Cependant, j'aimerais automatiser ce procédé grâce à un programme awk pour pouvoir faire toutes ces commandes "automatiquement" pour gagner du temps en changeant juste le fichier input file.
Merci à vous
# Quel est le besoin ? Quelle est la question ?
Posté par totof2000 . Évalué à 5. Dernière modification le 20 juin 2022 à 15:34.
Je connais très bien awk … Si tu veux je peux te le faire … mais pas gratos. Il me faudrait une expression de besoin.
Pour info, il y a longtemps, j'avais écrit un resolveur de sudoku en awk … Je dois l'avoir encore au fin fond d'une boite mail. A l'époque je m'étais référé au bouquin "sed et awk" de chez o'reilly. Sinon une requête sur un moteur de recherche te donnera des tutoriaux sur sed et awk (quelques liens non exhaustifs):
https://www.funix.org/fr/unix/awk.htm
https://www.shellunix.com/awk.html
https://connect.ed-diamond.com/GNU-Linux-Magazine/glmf-131/awk-le-langage-script-de-reference-pour-le-traitement-de-fichiers
https://perso.univ-rennes1.fr/pierre.nerzic/SYS1A/Amphi%20SYS%202015%20partie%206%20:%20Awk%20et%20Sed.pdf
Sinon la référence reste bien entendu la page ma,n awk de ton OS.
la page man de la commande awk linux (gnu awk) : https://man7.org/linux/man-pages/man1/awk.1p.html
Pour freeBSD: https://www.freebsd.org/cgi/man.cgi?query=awk&sektion=1
Attention cependant : en fonction de l'implémentation (GNU, BSD, unix prorio), il peut y avoir des variantes. Si le script doit être portable, il faut éviter les extensions GNU et s'assurer en parcourant les manpages des OS sur lequel le script doit fonctionner que celui-ci s'exécutera correctement sur le système cible (il me semble que certains OS comme AIX ou Solaris ont deux binaires awk disponibles et que, pour certaines fonctionnalités avancées il faut utiliser une autre version que celle installée par défaut. Mais bon, j'avais vu ça en 2004-2006 et ma mémoire me fait un peu défaut).
Sinon, s'il est possible d'installer GNU awk sur tous les systèmes sur lesquels le script doit tourner, la solution de facilité sera de développer le script en GNU Awk que tu installeras partout.
[^] # Re: Quel est le besoin ? Quelle est la question ?
Posté par TazFleck . Évalué à 0.
oulah beaucoup d'infos aha !
Euh non je ne veux pas prendre quelqu'un pour ca je suis étudiant et il y a du contenu de recherche physique que vous n'allez pas comprendre mais je vais consulter vos liens merci à vous !
[^] # Re: Quel est le besoin ? Quelle est la question ?
Posté par FantastIX . Évalué à 10. Dernière modification le 20 juin 2022 à 19:31.
Je dois avouer que j'ai un peu de mal à rester de marbre lorsque je lis une affirmation de ce type — je ne dois pas être le seul, AMHA. J'espère juste que tu réalises que c'est pratiquement impossible de te fournir des renseignements pertinents avec une description, que je comprends, si j'en juge par tes propos, volontairement nébuleuse. Mais je peux me tromper sur tes intentions…
En outre, la compréhension des données à traiter (par celui qui te fournit l'algorithme) est sans rapport aucun avec l'algorithme en question. Un exemple? On peut parfaitement reconnaître des données au format tabulaire et savoir comment les extraire, sans même avoir la moindre idée de ce qu'elles signifient.
Tout ce dont un développeur a besoin, c'est une description fonctionnelle complète de la (ou des) procédure(s) de traitement. Après, ce que les données signifient, on s'en bat les steaks. Ce qui compte, c'est ce qu'on extrait, comment et sur quelle base ou règle, s'il y en a.
Je ne saurais donc trop te conseiller, si tu souhaites encore récolter des pistes pertinentes sur cette question, de fournir des renseignements qui feront sortir ta question d'un flou artistique fort peu productif. Avec les renseignements dont on dispose ici, rien ne permet déjà d'affirmer que Awk est bien ce qu'il te faut et on pourrait tout aussi bien te suggérer de faire "ça" en Python, en C++, en Perl, en shell- ou en java- script, voire encore en brainfuck, avec
sed
ou bien en COBOL, tiens, pourquoi pas…# Un exemple qui va bien?
Posté par FantastIX . Évalué à 6. Dernière modification le 20 juin 2022 à 17:47.
… et tant qu'on y est, un qui ne va pas bien serait aussi le bienvenu.
Avant de confirmer (ou pas) le langage, il est de bon ton d'en vérifier la pertinence car, fréquemment, le diable se cache dans les détails. Une fois un concept généralisé, il peut arriver que le langage initial ne convienne plus et qu'un simple détail demande une complexité de programmation qui pourrait très bien être résolue en deux coups de cuillère à pot avec un langage approprié.
Dans le genre de questions à se poser, j'entrevois
alias
? (EDIT: à supposer que tu aies déjà une commande pour ça)Ajoute celles-ci à la liste de totof2000, bien entendu.
# Après relecture, peut être tout simplement ...
Posté par totof2000 . Évalué à 6.
awk -f fichier_script_awk input_file
Man de GNU awk :
gawk [ POSIX or GNU style options ] -f program-file [—] file …
# grep et cut
Posté par Papey . Évalué à 5.
Les commandes grep et cut peuvent très bien faire l'affaire pour des traitements simples. Je t'invite à te documenter aussi sur celles-ci :-). Avec bien sûr les "païpes" "|" qui vont bien, et la redirection de sortie standard ">".
[^] # Re: grep et cut
Posté par gUI (Mastodon) . Évalué à 6.
Je +1
En général mon utilisation de
awk
se limite à unprint $3
pour s'affranchir de la délimitation des champs, et ensuite jegrep
cut
tr
à volonté !En théorie, la théorie et la pratique c'est pareil. En pratique c'est pas vrai.
[^] # Re: grep et cut
Posté par FantastIX . Évalué à 4.
Perso, je
sed
souvent à la difficulté…--> []
[^] # Re: grep et cut
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 3.
Disons que pour faire une ou deux manips sur un fichier comme on ferait avec un éditeur de texte,
sed
est parfait (et c'est un éditeur issu de la même ligné quevi
…) C'est quand il s'agit de faire des traitements plus complexes (des structures de documents plus complexes et/ou sur plusieurs parties et pas que la manipulation comme dans éditeur —on va par exemple faire des calculs selon les valeurs de certains champs etc.) queawk
devient intéressant (et à l'origine c'était pour faire des rapport, créneau sur lequel uneperl
e a pris le relais plus tard, et son fonctionnement se rapproche plus d'un tableur que d'un éditeur de texte)“It is seldom that liberty of any kind is lost all at once.” ― David Hume
# sinon flex et bison
Posté par BAud (site web personnel) . Évalué à 2.
gawk est déjà un peu plus puissant (et mieux documenté) que awk
tu peux évoluer vers perl (je recommande peux, même si j'ai pratiqué) ou python qui a les bonnes bibliothèques pour faire le tout
si ton sujet est simple, gawk + bash suffira pour obtenir les bonnes sorties de données.
s'il y a des règles de gestion, tu n'échapperas pas à un langage de traitement (python est un très bon investissement si tu veux devenir data scientist)
à toi de préciser le besoin :-) reviens vers nous pour nous préciser tes choix, un exemple de données (anonymisées bien sûr), ça aiderait _o/
# Si il y a du CSV...
Posté par Tonton Th (Mastodon) . Évalué à 2.
… ça devient très vite compliqué de faire ça avec le Awk classique. Mais :
https://benhoyt.com/writings/goawk-csv/
Ceci dit, je n'ai pas encore essayé, mais tout ça m'a l'air bien sérieux. En tout cas la gestion native des CSVs ouvre beaucoup de nouveaux horizons (et au-delà).
[^] # Re: Si il y a du CSV...
Posté par Gil Cot ✔ (site web personnel, Mastodon) . Évalué à 2.
Ce Serpent Vieux de merde (:
“It is seldom that liberty of any kind is lost all at once.” ― David Hume
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.