Extraire information dans fichier

Résolu/Fermé
Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020 - 5 déc. 2016 à 16:24
 Utilisateur anonyme - 6 déc. 2016 à 18:55
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
A voir également:

2 réponses

Utilisateur anonyme
5 déc. 2016 à 16:38
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
Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020
5 déc. 2016 à 16:45
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
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
Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020 > Utilisateur anonyme
5 déc. 2016 à 16:55
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
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
Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020 > Utilisateur anonyme
6 déc. 2016 à 09:08
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
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
5 déc. 2016 à 18:50
Salut,

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

-1
Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020
6 déc. 2016 à 09:10
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
UnGnU Messages postés 1158 Date d'inscription lundi 2 mai 2016 Statut Contributeur Dernière intervention 22 décembre 2020 157 > Ka-El Messages postés 260 Date d'inscription lundi 28 novembre 2011 Statut Membre Dernière intervention 7 août 2020
6 déc. 2016 à 14:17
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
Utilisateur anonyme
6 déc. 2016 à 14:32
ça pose problème chez moi aussi, il ne m'affiche que 3 nombres

https://pastebin.com/dQejwhaB
0
UnGnU Messages postés 1158 Date d'inscription lundi 2 mai 2016 Statut Contributeur Dernière intervention 22 décembre 2020 157 > Utilisateur anonyme
6 déc. 2016 à 15:06
Tu peux essayer comme ça
 grep -Po '.*F\K[^.]*|$'
s'il te plaît, merci.
0
Utilisateur anonyme > UnGnU Messages postés 1158 Date d'inscription lundi 2 mai 2016 Statut Contributeur Dernière intervention 22 décembre 2020
Modifié par Rocailleux le 6/12/2016 à 16:25
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