Soustraction entre les flotants de deux colonnes

Résolu/Fermé
poiuytreza01234567890 Messages postés 54 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013 - Modifié par poiuytreza01234567890 le 24/01/2013 à 22:55
poiuytreza01234567890 Messages postés 54 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013 - 25 janv. 2013 à 11:42
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



A voir également:

3 réponses

Utilisateur anonyme
24 janv. 2013 à 22:31
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
poiuytreza01234567890 Messages postés 54 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013
Modifié par poiuytreza01234567890 le 24/01/2013 à 23:43
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
res=$(awk '{print $16-$14}') "$dirInput"

= un seul appel à awk
0
poiuytreza01234567890 Messages postés 54 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013
24 janv. 2013 à 23:49
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
poiuytreza01234567890 Messages postés 54 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013
Modifié par poiuytreza01234567890 le 25/01/2013 à 00:45
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
Utilisateur anonyme
25 janv. 2013 à 01:12
fais le point sur les guillemets.
0
poiuytreza01234567890 Messages postés 54 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013
Modifié par poiuytreza01234567890 le 25/01/2013 à 09:28
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
Utilisateur anonyme
25 janv. 2013 à 11:21
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
poiuytreza01234567890 Messages postés 54 Date d'inscription jeudi 17 janvier 2013 Statut Membre Dernière intervention 4 avril 2013
Modifié par poiuytreza01234567890 le 25/01/2013 à 11:51
Ce n'ai pas jolie c'est vrai! mais ça marche :D

Merci encore une fois
0