Rechercher chaines dans un fichier txt

Résolu
Pedroo -  
zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   -
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

  1. Utilisateur anonyme
     
    salut,

    ce que tu as écrit est horrible.
    grep -nf CAC.txt FAA.txt >Tri.txt
    1
    1. Pedroo
       
      Ok ta solution fonctionne super bien et est 'légèrement' plus élégante ;)
      Merci.
      0
  2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 502
     
    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
    1. Pedroo
       
      Celle ci fonctionne aussi très bien (je rajoute juste '> Tri.txt' pour mettre les résultats dans le fichier souhaité)

      Merci ;)
      0
  3. Pedroo
     
    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
  4. Pedroo
     
    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
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 502
       
      $ 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
    2. Pedroo
       
      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
    3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 502
       
      Quel système ?
      Quelle version de "sed" ?
      0
    4. Pedroo
       
      système : AIX 5L
      sed version : 5.2
      0
    5. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 502
       
      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