Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2969 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  multiples grep

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

multiples grep

n°596492
jame_s
Posté le 24-12-2003 à 15:25:40  profilanswer
 

J'aimerai trouver un moyen en bash de faire :
grep toto test.txt > lignes_avec_toto.txt
grep titi test.txt > lignes_avec_titi.txt
grep tutu test.txt > lignes_avec_tutu.txt
mais en une seule ligne de commande et en lisant une seule fois le fichier test.txt.
J'ai bien essayé la commande "tee" ou la commande "xargs" mais je n'ai pas obtenu le resultat escompté.
 
Joyeux noel à tous.

mood
Publicité
Posté le 24-12-2003 à 15:25:40  profilanswer
 

n°596494
bill.fr
Posté le 24-12-2003 à 15:31:36  profilanswer
 

je sais pas sous unix, mais en dos tu pourais faire un truc genre
 
for %i in (toto titi tutu) do grep %i test.txt > lignes_aves_%i.txt


---------------
On ne vit qu'une fois, mais pour qui sait vivre, une seule fois suffit (Merril Stubbing)
n°596496
*syl*
--> []
Posté le 24-12-2003 à 15:35:25  profilanswer
 

grep -G "toto\|tata\|titi" test.txt > lignes.txt
 
edit : ah oui mais toi tu veux 3 fichiers de sorties ? si c'est l'cas, tu pourras pas faire ce que tu souhaites en lisant le fichier 1 seule fois je pense..


Message édité par *syl* le 24-12-2003 à 15:38:07
n°596509
jame_s
Posté le 24-12-2003 à 16:02:39  profilanswer
 

pour bill.fr : on doit pouvoir le faire sous linux mais meme si ça tien en une ligne de commande je vais quand meme lire 3* mon fichier. (long quand tu l'applique sur un fichier de log de 15GO)
pour *Syl* :  oui j'aimerais la sortie dans 3 fichiers differents.
 
Merci pour ces reponse meme si ça ne correspond pas tous à fait à ce que je cherche.

n°596529
*syl*
--> []
Posté le 24-12-2003 à 17:02:01  profilanswer
 

jame_s > tu sais, la ligne de bill.fr lit 3x le fichier également, c'est qu'une boucle for..

n°596754
jame_s
Posté le 25-12-2003 à 13:32:48  profilanswer
 

oui c'est bien ce que je lui reproche meme si au depart c'etait une bonne idée


Message édité par jame_s le 25-12-2003 à 13:36:22
n°602489
bobuse
Posté le 05-01-2004 à 11:18:13  profilanswer
 

awk est ton ami ;)
 
avec un truc du genre comme instruction :

/*tata*/ { print $0 > tata.txt }

n°618924
aigles
Posté le 22-01-2004 à 14:40:15  profilanswer
 

Voici un petit script awk qui devrait répondre à ton besoin.
Il permet de faire de faire l'équivalent de plusieurs greps avec un fichier en sortie par chaîne recherchée.
 
La syntaxe d'appel est :
 

mgrep list=[i]chaines[/i] output=[i]output_file_spec[/i] [i]inputfile ...[/i]


[i]chaines[/i] :

Liste de chaines de caractéres à rechercher séparées par une vurgule

[i]sortie[/i]  :

Spécification des fichiers de sortie (defaut=%i.out) dans laquelle les substitution suivantes sont effectuées :

         

%c = chaine trouvée

         

%i = indice dans la liste de la chaine trouvée

         

%f = nom du fichier d'entrée dans lequel la chaîne a été trouvée
 
Par exemple :
 

mgrep list=toto,lulu output=lignes_avec_%c.txt test.txt


On obtient les fichiers :
   lignes_avec_toto.txt
   lignes_avec_lulu.txt
Ces fichiers ne sont créés que si la chaine de correspondante a été trouvée.
Si une ligne comporte à la fois "toto" et "lulu", elle se retrouvera dans les deux fichiers.
 

Code :
  1. #!/usr/bin/awk -f
  2. NR == 1 {
  3.    if (list == "" )
  4.       exit 1;
  5.    split (list, aList, "," );
  6.    if (output  == "" )
  7.       output = "%i.out";
  8. }
  9. FNR == 1 {
  10.    Out_f = output;
  11.    if (FILENAME == "-" )
  12.       gsub("%f", "stdin",  Out_f);
  13.    else
  14.       gsub("%f", FILENAME, Out_f);
  15. }
  16. {
  17.    for ( ind in aList ) {
  18.       chaine = aList[ind];
  19.       if ($0 ~ chaine) {
  20.          Out_c = Out_f;
  21.          gsub("%i", ind,    Out_c);
  22.          gsub("%c", chaine, Out_c);
  23.          print $0 >> Out_c;
  24.       }
  25.    }
  26. }


 


---------------
Jean Pierre.

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  multiples grep

 

Sujets relatifs
[PHP] éviter les posts multiples dans un forum avec F5 ? (flood)[C++] Inclusion multiples
fopen multiples dans une boucle, comment mieux faire ?Urgent... Multiples instances Tomcat
[résolu]variables provenant d'un <select> à choix multiples[SGBD/Mysql] Choix multiples et stockage en BDD
checkbox multiples [résolu]Map multiples
[Perl] Vitesse entre grep et defined 
Plus de sujets relatifs à : multiples grep


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)