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.

3 réponses

  1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
     
    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
    1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 659
       
      plus simple
      awk -F= '/^pkt/ {n++; p[a++]=$2; printf "%s\t%.3f\n", $0, n==1 ? 0 : $2-p[a-2]}'  fichier
      0
    2. 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
  2. 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
  3. 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
    1. 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