Modification de flux avec calcul
Résolu/Fermé
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
-
3 avril 2014 à 11:29
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 - 3 avril 2014 à 14:35
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 - 3 avril 2014 à 14:35
A voir également:
- Modification de flux avec calcul
- Suivi de modification word - Guide
- Logiciel modification pdf - Guide
- Calcul moyenne excel - Guide
- Formule de calcul excel - Guide
- Logiciel calcul plancher bois gratuit - Télécharger - Architecture & Déco
4 réponses
dubcek
Messages postés
18718
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
22 mars 2024
5 615
3 avril 2014 à 13:02
3 avril 2014 à 13:02
hello
me voilou
avec un flux à la place du echo, awk traitera chaque ligne qui arrive
me voilou
avec un flux à la place du echo, awk traitera chaque ligne qui arrive
$ echo 3:12.0 | awk -F "[:.]" '{print $1 ":" $2 "." sprintf("%03d", $3*1000/75)}'
3:12.000
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 407
3 avril 2014 à 11:56
3 avril 2014 à 11:56
Salut,
En espérant avoir tout compris de ton problème...
Ce fichier :
Lu ligne par ligne depuis le
C'est ça que tu veux ?
En espérant avoir tout compris de ton problème...
Ce fichier :
$ cat plop
1:22:120
23:45:565
54:10:963
Lu ligne par ligne depuis le
shellavec une temporisation de 3 secondes, pipé via
awkme sort :
$ while read line;do echo ${line};sleep 3;done < plop | awk 'BEGIN{FS=OFS=":"} {var=($3/75)*1000 } gsub($3, var,$3) { print }'
1:22:1600
23:45:7533.33
54:10:12840
C'est ça que tu veux ?
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
3 avril 2014 à 12:19
3 avril 2014 à 12:19
Salut, merci zipe, c'est presque ça. Le premier fichier se fini par 2 caractère (entre 0 et 74) et je doit ressortir un entier sur 3 caractère.
La bonne opération entière n'est pas celle que j'ai donnée, mais ff*1000/75.
Par contre, erreur de ma part, c'est [m]m:ss.ff le format
Je vois grosso modo comment modifier awk, sauf pour lui demander de respecter les 3 caractères pour l'affichage.
Par exemple, il faut transformer 3:12.00 en 3:12.000.
Question général : On est obligé de passer par le while, awk ne fonctionne pas en flux comme sed ?
La bonne opération entière n'est pas celle que j'ai donnée, mais ff*1000/75.
Par contre, erreur de ma part, c'est [m]m:ss.ff le format
Je vois grosso modo comment modifier awk, sauf pour lui demander de respecter les 3 caractères pour l'affichage.
Par exemple, il faut transformer 3:12.00 en 3:12.000.
Question général : On est obligé de passer par le while, awk ne fonctionne pas en flux comme sed ?
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 407
3 avril 2014 à 12:26
3 avril 2014 à 12:26
Je vois grosso modo comment modifier awk, sauf pour lui demander de respecter les 3 caractères pour l'affichage.Euh... là on va attendre dubcek, le spécialiste awk par excellence. Ma connaissance de awk est trop sommaire pour ça, désolé ;-(
Question général : On est obligé de passer par le while, awk ne fonctionne pas en flux comme sed ?J'ai utilisé une boucle
whilejuste pour simuler un flux continu. Pas de souci pour un emploi normal ;-))
Char Snipeur
Messages postés
9696
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 297
3 avril 2014 à 12:49
3 avril 2014 à 12:49
En effet, pas besoin du while.
J'ai trouver par hasard la fonction permettant de faire ce que je voulais. Au final la commande awk donne :
Encore merci zipe.
Par contre, ça ne résoud pas mon problème de split. Mais ceci est un autre sujet.
J'ai trouver par hasard la fonction permettant de faire ce que je voulais. Au final la commande awk donne :
awk 'BEGIN{FS=OFS="."} {var=$2*1000/75 } gsub($2, sprintf("%.3d",var),$3) { print }'
Encore merci zipe.
Par contre, ça ne résoud pas mon problème de split. Mais ceci est un autre sujet.
3 avril 2014 à 14:00
Une solution qui me convient, bien que plus obscure que celle de zipe Pour un néophite de awk comme moi.
3 avril 2014 à 14:29
Il définit 2 séparateurs de champs différents (deux points et point). Ce qui nous donne 3 champs pour chaque ligne.
Il imprime les 2 premiers champs tels qu'ils sont, en remettant le séparateur deux points entre les deux et le point en fin.
Puis il imprime le dernier champs en le mettant en forme directement grâce à la directive sprintf.
Comme dubcek connaît parfaitement toutes les subtilités de à l'inverse de bibi, c'est quand même beaucoup plus concis et précis ;-))
3 avril 2014 à 14:35
j'ajouterais que %03d affiche toujours 3 chiffres avec des 0 devant si < 100