Pb script unix pour faire un grep ds 1 while

Résolu/Fermé
mounou2301 - 14 janv. 2012 à 20:21
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 15 janv. 2012 à 11:01
Bonjour

Étant novice sur les commandes unix je vous expose mon souci,
je dois rechercher dans un répertoire qui contient des fichiers csv un ensemble de valeurs.

Par exemple si je me positionne dans le répertoire où sont les fichiers csv et que je saisis la commande :
grep 123456 *.csv puis enter alors j'obtiens bien en sortie standard la liste des lignes des fichiers csv dans lesquelles figure la valeur 123456

Je souhaite maintenant automatiser ce process, j'ai donc écrit un script pour lire un ensemble de valeurs contenues dans un fichier texte puis pour chacune d'entre elles faire le grep afin de la rechercher dans les fichier csv et écrire la sortie standard dans un fichier texte, voici le script

#!/bin/sh
ext=*.csv
res=resultat.txt
while read line
do
grep $line $fic$ext >> $res 2>1;
done < liste_dossiers.txt

liste_dossiers.txt contient la liste de valeurs à chercher
et resultat.txt contient les lignes trouvées dans les fichiers csv.

Le problème est que j'obtiens toujours à l'exécution un fichier resultat.txt qui est vide je ne comprends pas pourquoi

Auriez vous une idée ?

Merci pour votre aide
A voir également:

1 réponse

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
14 janv. 2012 à 20:25
Salut,

C'est le "$fic" dans "grep $line $fic$ext >> $res 2>1; " ?
il n'est initialisé nulle part ;-\

Un petit conseil. les variables lorsqu'elles sont concaténées, il vaut mieux les écrire "${fic}${ext}" ;-))
0
ok mais ca ne change rien mon fichier resultat est toujours vide...
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
14 janv. 2012 à 20:39
En fait j'ai oublié le "quoi" ;-((

C'est quoi le "$fic" dans "grep $line $fic$ext >> $res 2>1; " ?


Tu es dans le bon répertoire au moins ?
0
oui je suis dans le bon repertoire
en fait le $fic represente la racine du fichier a chercher
par exemple $fic= toto et $ext=*.csv
pour aller chercher dans tous les fichiers du type toto*.csv

j'ai aussi essayé la commande suivante dans le while :
grep $line *.csv >> resultat.txt mais ca ne marche pas, le fichier resultat.txt reste désespérément vide
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
15 janv. 2012 à 10:15
en fait le $fic represente la racine du fichier a chercher
par exemple $fic= toto et $ext=*.csv
pour aller chercher dans tous les fichiers du type toto*.csv

Non, ça ce n'est pas bon ;-(

Si "$[fic}" (avec les accolades pour les raisons expliquées plus haut) représente la racine (ou préfixe), alors le suffixe (extension) doit juste être initialisé comme :
ext=".csv"
et non :
ext="*.csv"
dans ce cas là, le préfixe est inutile vu que l'astérisque (*) représente tous ce qui se trouve avant le point précédent "csv" !

A quoi ressemble ton fichier "liste_dossiers.txt" ? Affiches-en un bout avec la commande :
cat -A liste_dossiers.txt

Est-ce que cette commande lancée depuis le répertoire contenant les ".csv" marche :
fgrep -f liste_dossiers.txt *.csv
0
le fichier liste_dossiers.txt contient un ensemble de valeurs à chercher dans les fichiers csv
exemple:
8182970
8184202
8186894 etc..

Si je tape en ligne de commande
grep 8182970 *.csv >> resultat.txt ca marche, ca me ramene les lignes contenant la valeur 8182970

J'ai changé le scipt en mettant dans la boucle while la simple commande :
grep $line *.csv >> resultat.txt mais malheureusement le fichier resultat.txt reste vide

si je mets grep $line .csv >> resultat.txt ca me sort une erreur => .csv No such file or directory

J'ai même rajouté un echo $line avant le grep dans la boucle : à l'exécution il m'affiche bien toutes les valeurs du fichier liste_dossiers.txt mais le résultat est toujours le même : resultat.txt est vide après exécution...
0