Script shell .

AK -  
tuxboy Messages postés 1083 Statut Membre -
Bonjour,
je veux savoir une commande qui me calcule la différence entre deux nombre dans un fichier.
pour plus de détails c'est mon fichier texte :

pict_type=I
pkt_pts=70435.549178 
--
pict_type=I
pkt_pts=70436.909178 
--
pict_type=I
pkt_pts=70438.189178 
--
pict_type=I
pkt_pts=70439.669178 
--
pict_type=I
pkt_pts=70440.029178 
--
pict_type=I
pkt_pts=70441.469178 
--
pict_type=I
pkt_pts=70442.549178 
--
pict_type=I
pkt_pts=70443.869178 
--
pict_type=I
pkt_pts=70445.029178 
--
pict_type=I
pkt_pts=70446.629178 
--
pict_type=I
pkt_pts=70447.789178 
--
pict_type=I
pkt_pts=70449.029178 
--
pict_type=I
pkt_pts=70450.229178 
--
pict_type=I
pkt_pts=70451.549178 
--
pict_type=I
pkt_pts=70452.989178 
--
pict_type=I
pkt_pts=70454.429178 

je veux calculer la différence entre chaque deux pkt_pts successifs

merci pour vos réponses.

A voir également:

3 réponses

dubcek Messages postés 19021 Statut Contributeur 5 637
 
hello
à vérifier
$ awk -F= '$1 !~ /^pkt/ {next} {n++; p[a++]=$2; printf "%s\t%.3f\n", $0, n==1 ? 0 : $2-p[a-2]}'  fichier
pkt_pts=70435.549178	0.000
pkt_pts=70436.909178	1.360
pkt_pts=70438.189178	1.280
pkt_pts=70439.669178	1.480
pkt_pts=70440.029178	0.360
pkt_pts=70441.469178	1.440
pkt_pts=70442.549178	1.080
pkt_pts=70443.869178	1.320
pkt_pts=70445.029178	1.160
pkt_pts=70446.629178	1.600
pkt_pts=70447.789178	1.160
pkt_pts=70449.029178	1.240
pkt_pts=70450.229178	1.200
pkt_pts=70451.549178	1.320
pkt_pts=70452.989178	1.440
pkt_pts=70454.429178	1.440
$ 
2
dubcek Messages postés 19021 Statut Contributeur 5 637
 
plus simple
awk -F= '/^pkt/ {n++; p[a++]=$2; printf "%s\t%.3f\n", $0, n==1 ? 0 : $2-p[a-2]}'  fichier
0
tuxboy Messages postés 1083 Statut Membre 190
 
avec p[a-2], je trouvais ta première formule exceptionnelle, mais là, elle devient carrément excellente.
0
Utilisateur anonyme
 
salut,

propose-nous un algorithme, et au moins un début de code

nous serons content de d'aider alors; pas de faire ton boulot !
0
tuxboy Messages postés 1083 Statut Membre 190
 
Tu peux partir par exemple là dessus :
#! /bin/bash
for line in $(cat file.txt);
do
T=$(echo "$line" | sed s/[^0-9.]*//g)
echo $T;
done
-2
Utilisateur anonyme
 
- une boucle for sur une substitution de commande va itérer sur chaque mot retourné.
- uuoc !
- passer par une variable pour exécuter une commande pour ensuite afficher la variable est inutile.

un fichier se lit en utilisant une boucle while et en redirigeant le contenu du fichier vers celle-ci.

avant de proposer une solution, teste-la !
0