multiples grep - Shell/Batch - Programmation
Marsh Posté le 24-12-2003 à 15:31:36
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
Marsh Posté le 24-12-2003 à 15:35:25
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..
Marsh Posté le 24-12-2003 à 16:02:39
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.
Marsh Posté le 24-12-2003 à 17:02:01
jame_s > tu sais, la ligne de bill.fr lit 3x le fichier également, c'est qu'une boucle for..
Marsh Posté le 25-12-2003 à 13:32:48
oui c'est bien ce que je lui reproche meme si au depart c'etait une bonne idée
Marsh Posté le 05-01-2004 à 11:18:13
awk est ton ami
avec un truc du genre comme instruction :
/*tata*/ { print $0 > tata.txt } |
Marsh Posté le 22-01-2004 à 14:40:15
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 :
|
Marsh Posté le 24-12-2003 à 15:25:40
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.