Extraction de chaines : grep, awk ???
paques
Messages postés
4
Date d'inscription
Statut
Membre
Dernière intervention
-
J-awk -
J-awk -
Bonjour,
je suis un peu nouveau en shell Unix, et je suis un peu perdu !
J'ai un besoin assez urgent :
j'ai un répertoire avec des fichiers,
.1 - je dois trouver quels fichiers contiennent une chaine de caractère (par exemple 'toto'),
.2 - je veux stocker la liste de fichiers dans un fichier que j'appelle liste
puis :
.3 - je veux extraire les lignes dans lesquelles j'ai trouvé la chaine 'toto' et les assembler dans un autre fichier que j'appelle sortie.
Donc je commence comme ça :
.1 et .2 : ça me donne les noms de fichiers puis ça les stocke dans liste
grep -il toto *.fic > liste 2>&1
J'ai donc isolé la liste de fichiers.
C'est pour le .3 que j'ai du mal.
Je voudrais mettre dans un tableau la liste de fichiers qui est dans liste,
puis pour chaque valeur du tableau (qui est donc le nom d'un fichier), utiliser la commande awk pour chercher les lignes contenant 'toto' et copier cette ligne et la suivante dans le fichier sortie
Auriez-vous une idée de ce qu'il faut écrire pour le .3 ?
Comment mettre les éléments de liste dans un tableau ?
Comment dire à awk de chercher 'toto' et de copier la ligne et la suivante dans sortie ?
Merci beaucoup pour votre aide.
je suis un peu nouveau en shell Unix, et je suis un peu perdu !
J'ai un besoin assez urgent :
j'ai un répertoire avec des fichiers,
.1 - je dois trouver quels fichiers contiennent une chaine de caractère (par exemple 'toto'),
.2 - je veux stocker la liste de fichiers dans un fichier que j'appelle liste
puis :
.3 - je veux extraire les lignes dans lesquelles j'ai trouvé la chaine 'toto' et les assembler dans un autre fichier que j'appelle sortie.
Donc je commence comme ça :
.1 et .2 : ça me donne les noms de fichiers puis ça les stocke dans liste
grep -il toto *.fic > liste 2>&1
J'ai donc isolé la liste de fichiers.
C'est pour le .3 que j'ai du mal.
Je voudrais mettre dans un tableau la liste de fichiers qui est dans liste,
puis pour chaque valeur du tableau (qui est donc le nom d'un fichier), utiliser la commande awk pour chercher les lignes contenant 'toto' et copier cette ligne et la suivante dans le fichier sortie
Auriez-vous une idée de ce qu'il faut écrire pour le .3 ?
Comment mettre les éléments de liste dans un tableau ?
Comment dire à awk de chercher 'toto' et de copier la ligne et la suivante dans sortie ?
Merci beaucoup pour votre aide.
A voir également:
- Extraction de chaines : grep, awk ???
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Recherche automatique des chaînes tv thomson - Forum Téléviseurs
- Comment régler les chaines sur ma tv thomson ✓ - Forum Téléviseurs
- Chaîne introuvable sur Télé Thomson - Forum TNT / Satellite / Réception
- Windows ne peut pas effectuer l'extraction - Forum Bureautique
2 réponses
Salut,
A quoi sert la 1ère partie, le fait de récupérer les noms de fichiers ?
C'est indispensable ?
Par ce que si au final c'est juste le fait de récupérer dans chaque fichier la ligne contenant "toto" et la ligna qui suit, "sed" peut faire ça en 2 temps 3 mouvements ;-))
A quoi sert la 1ère partie, le fait de récupérer les noms de fichiers ?
C'est indispensable ?
Par ce que si au final c'est juste le fait de récupérer dans chaque fichier la ligne contenant "toto" et la ligna qui suit, "sed" peut faire ça en 2 temps 3 mouvements ;-))
Indispensable non, mais j'aurai bien aimé.
Cela dit, c'est indépendant, ça peut rester comme ça et il peut y avoir une autre fonction qui fait le reste, non ?
Donc avec sed, je vais tester mais je ne connais pas encore cette fonction. Si tu peux me mettre sur la piste, je veux bien !
Merci
Cela dit, c'est indépendant, ça peut rester comme ça et il peut y avoir une autre fonction qui fait le reste, non ?
Donc avec sed, je vais tester mais je ne connais pas encore cette fonction. Si tu peux me mettre sur la piste, je veux bien !
Merci
Ou comment réduire une tache ou awk serait tout aussi bien adapté pour en faire des microtache moins adapté.
C'est pas pour rien que awk a été créé hein (remplacement de grep + sed)
Pour la petite histoire :
awk '/toto/{getline x; print FILENAME" : "$0" ; "x}' *.fic > fichier_final
fait 1, 2 et 3 en une seule ligne (et se permet de luxe de faire de la mise en page : j'ai mis les deux lignes sur une seule, mais tu peux utiliser 2 prints pour la même chose).
Tu peux aussi, pour faire le 1, 2 et 3, le rediriger dans deux fichier :
awk '/toto/{getline x; if(alreadyprint[FILENAME]!=1){print FILENAME > "liste ";alreadyprint[FILENAME]=1} print FILENAME " : "$0" ; "x > "fichier_final"}' *.fic
Et je trouve ça "plus simple" qu'un sed qui ne fait que la moitié ou qu'un mix sed + grep pour faire la totalité. (dsl pour le up, c'est mon coup de gueule du jour pour tout ceux qui veulent remplacer awk par des commandes SED parfois moins adapté)
C'est pas pour rien que awk a été créé hein (remplacement de grep + sed)
Pour la petite histoire :
awk '/toto/{getline x; print FILENAME" : "$0" ; "x}' *.fic > fichier_final
fait 1, 2 et 3 en une seule ligne (et se permet de luxe de faire de la mise en page : j'ai mis les deux lignes sur une seule, mais tu peux utiliser 2 prints pour la même chose).
Tu peux aussi, pour faire le 1, 2 et 3, le rediriger dans deux fichier :
awk '/toto/{getline x; if(alreadyprint[FILENAME]!=1){print FILENAME > "liste ";alreadyprint[FILENAME]=1} print FILENAME " : "$0" ; "x > "fichier_final"}' *.fic
Et je trouve ça "plus simple" qu'un sed qui ne fait que la moitié ou qu'un mix sed + grep pour faire la totalité. (dsl pour le up, c'est mon coup de gueule du jour pour tout ceux qui veulent remplacer awk par des commandes SED parfois moins adapté)