Extraire information dans fichier

Résolu
Ka-El Messages postés 279 Statut Membre -  
 Utilisateur anonyme -
Bonjour,
Je suis actuellement confronté à un problème d'extraction.
Voilà je dispose d'un fichier que j'appellerais "toto.txt".
Voici son contenu:
Start
Serveur=anonyme
1212596 816 -rw-rw-r-- 1 toto groland 829924 nov. 29 04:35 /data/xpl/tmp/F0413691
1212871 35184 -rw-rw-r-- 1 toto groland 35984440 nov. 6 00:03 /data/xpl/tmp/F0397858.pi99
1212859 58048 -rw-rw-r-- 1 toto groland 59373540 nov. 3 14:22 /data/xpl/tmp/F0396850.pi99
1212891 684 -rw-rw-r-- 1 toto groland 693250 nov. 11 04:10 /data/xpl/tmp/F0401716
1212814 35200 -rw-rw-r-- 1 toto groland 36003240 oct. 30 00:01 /data/xpl/tmp/F0394328.pi99
213009 4 -rw-rw-r-- 1 toto groland 1044 oct. 12 17:23 /data/xpl/tmp/F0381021
1212720 4 -rw-rw-r-- 1 toto groland 40 oct. 14 17:29 /data/xpl/tmp/F0383063
1212721 4 -rw-rw-r-- 1 toto groland 2344 oct. 10 15:23 /data/xpl/tmp/F0378393
1212564 632 -rw-rw-r-- 1 toto groland 641737 nov. 28 04:41 /data/xpl/tmp/F0412689
End

Il faut que je parvienne à extraire le numéro qui se trouve en fin de ligne derrière le "F*".
A noter la difficulté avec la ligne suivante (il peut y en avoir plusieurs):
1212814 35200 -rw-rw-r-- 1 toto groland 36003240 oct. 30 00:01 /data/xpl/tmp/F0394328.pi99

Comment puis-je effectuer cette opération ?
Avec une boucle for j'imagine ?

Merci d'avance pour votre aide.
Ka-El

2 réponses

  1. Utilisateur anonyme
     
    echo "$a" | sed -e 's/^.*F\(.*\)/\1/g'
    0413691 
    0397858.pi99 
    0396850.pi99 
    0401716 
    0394328.pi99 
    0381021 
    0383063 
    0378393 
    0412689


    avec $a qui contient le retour de ton ls -l
    a="`ls -l`"
    0
    1. Ka-El Messages postés 279 Statut Membre
       
      Merci Rocailleux !
      c'est pas mal du tout. Par contre, il me faudrait le même résultat mais sans l'extension ".pi99" sur les 3 lignes.
      Une idée ?
      Merci
      0
    2. Utilisateur anonyme
       
      echo "$a" | sed -e 's/^.*F\(.*\)/\1/g' | cut -d. -f1
      0413691 
      0397858
      0396850
      0401716 
      0394328
      0381021 
      0383063 
      0378393 
      0412689


      ou inclus dans le sed ..

      $echo "$a" | sed -e 's/^.*F\([0-9]*\).*$/\1/g'
      0413691
      0397858
      0396850
      0401716
      0394328
      0381021
      0383063
      0378393
      0412689
      
      0
    3. Ka-El Messages postés 279 Statut Membre > Utilisateur anonyme
       
      C'est effectivement le résultat que j'attends.
      Mais je ne comprends pas pourquoi tu utilises un echo, sachant que je dois extraire les informations à partir d'un fichier ?
      Ne faudrait-il pas passer par un "cat" ?
      Désolé je ne suis pas une flèche en shell...
      0
    4. Utilisateur anonyme
       
      Pour faire mes tests j'ai mis le contenu de ton ls -l dans une variable, donc pour envoyer ma variable dans le sed il faut faire un echo "$variable" | sed.

      Après effectivement si les lignes se trouvent dans un fichier ce sera cat fichier | sed (edit : ou sed 's...' fichier )
      0
    5. Ka-El Messages postés 279 Statut Membre > Utilisateur anonyme
       
      Bonjour et merci beaucoup Rocailleux !
      ça marche bien, mais je me suis aperçu que ta commande ne donnait pas le résultat attendu avec les lignes de ce type:
      1212625 1252 -rw-rw-r-- 1 toto groland 1276099 déc. 5 04:12 /data/xpl/tmp/F0418293

      Visiblement c'est les caractères exotiques du mois "déc" qui empêche le traitement de se faire correctement.
      Comment peut-on faire pour gérer néanmoins cette ligne et récupérer le numéro "0418293" ?
      Tu as une idée ?
      0
  2. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    $ grep -Po '.*F\K[^.]*' fich 
    0413691
    0397858
    0396850
    0401716
    0394328
    0381021
    0383063
    0378393
    0412689

    -1
    1. Ka-El Messages postés 279 Statut Membre
       
      Bonjour zipe31,
      Merci pour ton aide.
      Mais je viens de tester ta commande sur mon fichier "fich" et je n'obtiens aucune réponse...
      Je l'applique mal ?
      Merci
      0
    2. UnGnU Messages postés 1468 Statut Contributeur 158 > Ka-El Messages postés 279 Statut Membre
       
      Salut,
      Je l'applique mal ?
      Faut croire ;-(

      $ cat fichier
      Start
      Serveur=anonyme
      1212596 816 -rw-rw-r-- 1 toto groland 829924 nov. 29 04:35 /data/xpl/tmp/F0413691
      1212871 35184 -rw-rw-r-- 1 toto groland 35984440 nov. 6 00:03 /data/xpl/tmp/F0397858.pi99
      1212859 58048 -rw-rw-r-- 1 toto groland 59373540 nov. 3 14:22 /data/xpl/tmp/F0396850.pi99
      1212891 684 -rw-rw-r-- 1 toto groland 693250 nov. 11 04:10 /data/xpl/tmp/F0401716
      1212814 35200 -rw-rw-r-- 1 toto groland 36003240 oct. 30 00:01 /data/xpl/tmp/F0394328.pi99
      213009 4 -rw-rw-r-- 1 toto groland 1044 oct. 12 17:23 /data/xpl/tmp/F0381021
      1212720 4 -rw-rw-r-- 1 toto groland 40 oct. 14 17:29 /data/xpl/tmp/F0383063
      1212721 4 -rw-rw-r-- 1 toto groland 2344 oct. 10 15:23 /data/xpl/tmp/F0378393
      1212564 632 -rw-rw-r-- 1 toto groland 641737 nov. 28 04:41 /data/xpl/tmp/F0412689
      End

      $ grep -Po '.*F\K[^.]*' fichier
      0413691
      0397858
      0396850
      0401716
      0394328
      0381021
      0383063
      0378393
      0412689
      0
    3. UnGnU Messages postés 1468 Statut Contributeur 158 > Utilisateur anonyme
       
      Tu peux essayer comme ça
       grep -Po '.*F\K[^.]*|$'
      s'il te plaît, merci.
      0
    4. Utilisateur anonyme > UnGnU Messages postés 1468 Statut Contributeur
       
      Pas de soucis avec celle ci, tout s'affiche

      $grep --version
      grep (GNU grep) 2.26
      
      $bash --version
      GNU bash, version 4.4.5(1)-release (x86_64-unknown-linux-gnu)
      0