Rechercher chaines dans un fichier txt

Résolu/Fermé
Pedroo - 6 juin 2011 à 16:24
zipe31 Messages postés 36316 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 - 7 juin 2011 à 11:16
Bonjour,


j'ai un petit souci pour mon script sh :


J'ai deux fichiers : Chaines_A_Chercher.txt (CAC.txt) et Fichier_A_Analyser.txt (FAA.txt)


Voici leurs formes :

CAC.txt :
chaine1
chaine2
chaine3



FAA.txt : (il s'agit en fait d'un log de sortie)
Ligne1
Ligne2
Ligne3


Ce que je voudrai c'est que pour chaque ligne de FAA.txt, si le script trouve une ou plusieurs des chaines renseignées dans CAC.txt, alors il copie cette ligne depuis FAA.txt vers un autre fichier, appelons le Tri.txt et en indiquant si possible le numéro de ligne de FAA.txt.

Je nage ...

Merci pour votre aide ;)

4 réponses

salut,

ce que tu as écrit est horrible.
grep -nf CAC.txt FAA.txt >Tri.txt
1
Ok ta solution fonctionne super bien et est 'légèrement' plus élégante ;)
Merci.
0
zipe31 Messages postés 36316 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 543
6 juin 2011 à 17:34
Salut,

$ cat cac.txt
chaine1
chaine2
chaine3

$ cat faa.txt
Ligne1
Ligne2 chaine3
Ligne3
ligne4 chaine1

$ fgrep -f cac.txt -n faa.txt
2:Ligne2 chaine3
4:ligne4 chaine1

$

;-))
1
Celle ci fonctionne aussi très bien (je rajoute juste '> Tri.txt' pour mettre les résultats dans le fichier souhaité)

Merci ;)
0
Ok j'ai peut être posté un peu vite. Ce bout de code fait l'affaire :

 
while read ligne
do
set $(echo $ligne)
word=$(eval echo $1)
echo $word
cat Fichier_A_Analyser | grep -i -n $word 2>&1 >> Tri.txt
done < Chaines_A_Chercher.txt


;)
0
Peut être pouvez vous m'aider sur ce point :

Mon Fichier_A_Analyser a cette forme :


Checking ....
...................
......motclé...
...................
Checking ....
...................
...................
...................
Checking ....
...................
...................
...................
etc


Je voudrai pouvoir extraire tout le paragraphe de 'Checking' jusqu'au '.' précédent un retour à la ligne et le prochain 'Checking' si ce paragraphe contient un ou plusieurs de mes mots clés. Dans l'exemple extraire les 4 premières lignes.

Merci.
0
zipe31 Messages postés 36316 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 543
7 juin 2011 à 10:36
$ cat plop
Checking ....
...................
......motclé...
...................
Checking ....
...................
...................
...................
Checking ....
...................
...................
...................
etc

$ sed -n ':z;/^Checking/{h;n};H;n;/^Checking/!bz;x;/motclé/p;x;bz' plop
Checking ....
...................
......motclé...
...................
$
0
Ca ne fonctionne pas. Le message d'erreur est :
sed: The label :z;/^Checking/{h;n};H;n;/^Checking/!bz;x;/motclé/p;x;bz is greater than eight characters.

Note : Les lignes de mon fichier plop sont de taille variable.
0
zipe31 Messages postés 36316 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 543
7 juin 2011 à 11:00
Quel système ?
Quelle version de "sed" ?
0
système : AIX 5L
sed version : 5.2
0
zipe31 Messages postés 36316 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 543
7 juin 2011 à 11:16
Essaye comme ça (une commande par ligne) :

$ sed -n '
:z
/^Checking/ {
    h
    n
}
H
n
/^Checking/ !b z
x
/motclé/ p
x
b z
' plop

Ou alors créés un fichier de script et appelles-le comme suit :
$ cat script.sed
#n
:z
/^Checking/ {
    h
    n
}
H
n
/^Checking/ !b z
x
/motclé/ p
x
b z

$ sed -f script.sed plop
Checking ....
...................
......motclé...
...................

$
0