Soustraction entre les flotants de deux colonnes

Résolu
poiuytreza01234567890 Messages postés 57 Statut Membre -  
poiuytreza01234567890 Messages postés 57 Statut Membre -
Bonjour,

J'ai un fichier avec bcp de colonnes et bcp de lignes bref
Je veux soustraire la 16éme colonne de la 14éme colonne (sachants que leur valeurs est un flotant).
voici mon script:
#!/bin/bash    
dirInput=/home/sukrat/fichier1.txt;   
dirOutput=/home/sukrat/fichier2.txt;   

val1=$(awk '{print $16}' $dirInput)   
val2=$(awk '{print $14}' $dirInput)   

calcul=$(($val1-$val2))  
echo "$calcul" > $Output 


mon script m'affiche deux erreurs:

impossible de manipuler des flotants et le signe "-" de soustraction n'ai pas reconnu

Pouvez-vous me corriger SVP

Merci

3 réponses

  1. Utilisateur anonyme
     
    salut,

    bash ne gère pas les évaluations arithmétiques sur les décimaux :(

    Fais tes calculs directement dans awk, au lieu de l'appeler deux fois pour pas grand chose.
    0
  2. poiuytreza01234567890 Messages postés 57 Statut Membre
     
    En mettant comme ça:
    res=$(awk -v variable1="$Val1" -v variable2="$val2" '{print (variable1-variable2)}' $dirInput)
    echo "$res"

    ça ne marche pas non plus :(
    0
    1. Utilisateur anonyme
       
      res=$(awk '{print $16-$14}') "$dirInput"

      = un seul appel à awk
      0
    2. poiuytreza01234567890 Messages postés 57 Statut Membre
       
      c'est vrai, c'est plus simple ! Merci.
      Avec ce que j'ai fais avant, il m'affiche le calcule d'une seule ligne.
      0
  3. poiuytreza01234567890 Messages postés 57 Statut Membre
     
    J'ai ajouté une condition à mon awk
    pour lui dire de m'afficher ça:

    minDe=$(cut -d" " -f19 $dirInput | sort -n | sed '1,${1b;d}') #minimum de la 18éme colonne
    res=$(awk -v var="$minDe" '($16-$14) > var {print "je vire de mon analyse" " $16-$14 " " "car il est > à" var}' $dirInput)
    echo "$res"

    Erreur:
    awk: ligne de commande:1: $14 > var {print "je vire de mon analyse" " $16-$14 " " "car il est > à" var}
    awk: ligne de commande:1: ^ caractère non valide « ? » dans l'expression
    awk: ligne de commande:1: $14 > var {print "je vire de mon analyse" " $16-$14 " " "car il est > à" var}
    awk: ligne de commande:1: ^ syntax error

    je ne comprends pas! c'est quoi mon erreur ?
    j'ai essayé d'autres écriture toujours la même erreur
    0
    1. Utilisateur anonyme
       
      fais le point sur les guillemets.
      0
    2. poiuytreza01234567890 Messages postés 57 Statut Membre
       
      Ouii effectivement, c'est une erreur de guillemets (ci-dessous le bon code).
      Merci

      res=$(awk -v var="$minDe" ' ($16-$14) > var {print "je vire de mon analyse"  "  " $16-$14 " " "car il est > à"  " " var}' $dirInput) 
      echo "$res" 
      0
    3. Utilisateur anonyme
       
      wouha! t'aimes ça, hein? t'es vraiment gourmand, toi!

      res=$(awk -v var="$minDe" ' ($16-$14) > var {print "je vire de mon analyse "$16-$14" car il est > à " var}' $dirInput) 
      echo "$res" 
      0
    4. poiuytreza01234567890 Messages postés 57 Statut Membre
       
      Ce n'ai pas jolie c'est vrai! mais ça marche :D

      Merci encore une fois
      0