Pages : 1
#1 Le 21/02/2013, à 01:44
- xana02
Grep apres 3 espace comment faire
Bonjour, j'ai un fichier txt avec
16547840 1% 69.76kB/s 5:00:50
Pour pas vous mentir c'est une sortie de log Rsync .
Je cherche a mettre dans un autre fichier tout ce qu'il y a avant le % donc pour l'exemple un autre fichier avec 1 dedans , a savoir aussi qu'il faut grep la dernier ligne du fichier .
Il faudrait faire pareil pour la vitesse grep le 69.76kB/s hop encore dans un autre fichier .
et si possible " Encore" Grep la 2 eme ligne du fichier
Voila merci
Hors ligne
#2 Le 21/02/2013, à 03:29
- Maisondouf
Re : Grep apres 3 espace comment faire
Grep permet d'isoler une ligne qui contient un motif mais pas de la découper.
Pour ça il y a 'cut' ou 'gawk'.
echo " 16547840 1% 69.76kB/s 5:00:50" | gawk -F " " '{print $2}' | cut -d '%' -f 1
echo " 16547840 1% 69.76kB/s 5:00:50" | gawk -F " " '{print $3}' | cut -d 'k' -f 1
ASUS M5A88-v EVO avec AMD FX(tm)-8120 Eight-Core Processor, OS principal Precise 12.04.1 LTS 63bits½
Bricoleur, menteur, inculte, inadapté social et mythomane, enfin d'après certains....
"the secret of my form is summed up in two words, no sport" (Winston Churchill)
Hors ligne
#3 Le 21/02/2013, à 04:24
- xana02
Re : Grep apres 3 espace comment faire
Ca fonctionne , mais il serait possible de lui dire de prendre la dernier ligne du fichier
gawk -F " " '{print $2}' | cut -d '%' -f 1 log.txt , il lie bien le fichier mais s’arrête au premier %
Hors ligne
#4 Le 21/02/2013, à 05:01
- nesthib
Re : Grep apres 3 espace comment faire
Est-ce que tu peux donner un extrait plus complet du « fichier » (là tu ne donnes qu'une ligne) ainsi qu'un exemple de la sortie que tu désires avoir ?
@Maisondouf : utiliser cut après awk c'est lâche, tu pourrais tout faire en un coup
GUL Bordeaux : Giroll – Services libres : TdCT.org
Hide in your shell, scripts & astuces : applications dans un tunnel – smart wget – trouver des pdf – install. auto de paquets – sauvegarde auto – ♥ awk
⃛ɹǝsn xnuᴉꞁ uʍop-ǝpᴉsdn
Hors ligne
#5 Le 21/02/2013, à 07:32
- pingouinux
Re : Grep apres 3 espace comment faire
Bonjour,
Grep permet d'isoler une ligne qui contient un motif mais pas de la découper.
En fait, l'option -o de grep permet de n'afficher que la partie de la ligne qui correspond au motif. L'option -P permet d'utiliser une expression régulière de type Perl.
Avec ton exemple :
$ grep -Po '\d+(?=%)' <<<" 16547840 1% 69.76kB/s 5:00:50"
1
$ grep -Po '[\d.]+(?=kB/s)' <<<" 16547840 1% 69.76kB/s 5:00:50"
69.76
ou même, en regroupant les deux
$ grep -Po '\d+(?=%)|[\d.]+(?=kB/s)' <<<" 16547840 1% 69.76kB/s 5:00:50"
1
69.76
ou
$ grep -Po '[\d.]+((?=%)|(?=kB/s))' <<<" 16547840 1% 69.76kB/s 5:00:50"
1
69.76
Hors ligne
#6 Le 21/02/2013, à 08:40
- credenhill
Re : Grep apres 3 espace comment faire
hello
à tester avec plus de données
awk -F "[ \t%k]*" 'NR==2 {print > "fich1"} {print $2 > "fich2"; print $3 > "fich3"} END{print > "fich4"}' log
Hors ligne
#7 Le 21/02/2013, à 11:43
- Maisondouf
Re : Grep apres 3 espace comment faire
@Maisondouf : utiliser cut après awk c'est lâche, tu pourrais tout faire en un coup
Toujours mon vieux principe... une petite chose bien faite à la fois.
ASUS M5A88-v EVO avec AMD FX(tm)-8120 Eight-Core Processor, OS principal Precise 12.04.1 LTS 63bits½
Bricoleur, menteur, inculte, inadapté social et mythomane, enfin d'après certains....
"the secret of my form is summed up in two words, no sport" (Winston Churchill)
Hors ligne
#8 Le 21/02/2013, à 13:21
- xana02
Re : Grep apres 3 espace comment faire
Je vous remercie pour tout ce mal . Mais j'ai toujours un soucie
le fichier log contient
sending incremental file list
Backup.tar
48267264 0% 0.00kB/s 0:00:00
48660480 0% 383.23kB/s 5:03:55
49020928 0% 352.66kB/s 5:30:15
7036502016 99% 230.53kB/s 0:00:03
7036764160 99% 230.01kB/s 0:00:02
7037222912 99% 273.87kB/s 0:00:00
7037234770 100% 245.62kB/s 7:43:07 (xfer#1, to-check=0/1)
sent 6991939689 bytes received 31 bytes 251612.71 bytes/sec
total size is 7037234770 speedup is 1.01
Celui ci fais environ 25000 Ligne . Si je fais
grep -Po '\d+(?=%)' log2
Il me sort
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
1
Mais sa risque de prendre trop de temps , il serait possible de lui dire d'aller chercher le caractère derrière le % mais a la dernière ligne du fichier ?
Hors ligne
#9 Le 21/02/2013, à 13:24
- xana02
Re : Grep apres 3 espace comment faire
hello
à tester avec plus de donnéesawk -F "[ \t%k]*" 'NR==2 {print > "fich1"} {print $2 > "fich2"; print $3 > "fich3"} END{print > "fich4"}' log
J'ai testé j'ai bien 4 fichier qui se crée mais il y a que le premier qui et bon les autre affiche des donnés inutile
Fichier1
Backup.tar
Ok le nom de la 2 eme ligne
Fichier2
incremental
Backup.tar
48267264
6991939689
size
Heuu j'ai pas besoin de ca
et 3-4 c'est quasiment pareil
Hors ligne
#10 Le 21/02/2013, à 13:31
- pingouinux
Re : Grep apres 3 espace comment faire
il serait possible de lui dire d'aller chercher le caractère derrière le % mais a la dernière ligne du fichier ?
Le caractère derrière le %, ou le nombre qui se trouve devant ?
La dernière ligne du fichier, ou la dernière ligne qui contient un % ?
Ajouté :
Est-ce ceci que tu veux ?
grep -Po '\d+(?=%)' log2 | tail -1
Dernière modification par pingouinux (Le 21/02/2013, à 13:32)
Hors ligne
#11 Le 21/02/2013, à 13:35
- xana02
Re : Grep apres 3 espace comment faire
xana02 #8 a écrit :il serait possible de lui dire d'aller chercher le caractère derrière le % mais a la dernière ligne du fichier ?
Le caractère derrière le %, ou le nombre qui se trouve devant ?
La dernière ligne du fichier, ou la dernière ligne qui contient un % ?Ajouté :
Est-ce ceci que tu veux ?grep -Po '\d+(?=%)' log2 | tail -1
Tu as raison excuse , Je voudrais le nombre avant % , mais a la fin du fichier
Par contre la commande fonctionne mais ca mais un temps fou a parcourir 25000 Ligne en 5 minutes pour un log c'est long ...
Dernière modification par xana02 (Le 21/02/2013, à 13:37)
Hors ligne
#12 Le 21/02/2013, à 13:39
- pingouinux
Re : Grep apres 3 espace comment faire
Je voudrais le nombre avant % , mais a la fin du fichier
Si le % que tu cherches est sur la dernière ligne du fichier :
tail -1 log2 | grep -Po '\d+(?=%)'
Hors ligne
#13 Le 21/02/2013, à 13:42
- xana02
Re : Grep apres 3 espace comment faire
xana02 #11 a écrit :Je voudrais le nombre avant % , mais a la fin du fichier
Si le % que tu cherches est sur la dernière ligne du fichier :
tail -1 log2 | grep -Po '\d+(?=%)'
Il faut vraiment que je dorme ...
le dernier % ce trouve pas a la fin mais 4 ligne avant la fin du fichier ...
Hors ligne
#14 Le 21/02/2013, à 13:44
- pingouinux
Re : Grep apres 3 espace comment faire
Dans ce cas, la commande que je t'indique en #10 doit marcher.
Ajouté :
Si tu es sûr que c'est la 4ème ligne à partir de la fin :
tail -4 log2 | head -1 | grep -Po '\d+(?=%)'
Dernière modification par pingouinux (Le 21/02/2013, à 13:47)
Hors ligne
#15 Le 21/02/2013, à 13:47
- xana02
Re : Grep apres 3 espace comment faire
Dans ce cas, la commande que je t'indique en #10 doit marcher.
Oui certe mais le temps que le grep parcours les 25000 ligne il sait passé 5 minutes , mon fichier fais plus de 25000 Ligne .
Je cherche justement un commande pour prendre les 4 dernier ligne et apres utilisé ta commande comme ca au lieu de parcourir 25000 ligne il en parcours 4
Hors ligne
#16 Le 21/02/2013, à 13:48
- pingouinux
Re : Grep apres 3 espace comment faire
J'ai complété mon message #14 pendant que tu répondais.
Hors ligne
#17 Le 21/02/2013, à 13:53
- credenhill
Re : Grep apres 3 espace comment faire
essayer avec
awk -F "[ \t%k]*" 'NR==2 {print > "fichier1"} /kB/ {print $3 > "fichier2"; print $4 > "fichier3"} END{print > "fichier4"}' log
Hors ligne
#18 Le 21/02/2013, à 13:55
- xana02
Re : Grep apres 3 espace comment faire
J'ai reussi a me faire mon propre code enfin plus ou moins mais grace a vous ^^
tail -c 900 ''log2'' | grep -Po '\d+(?=%)' | tail -1 > Logfini
Hors ligne