Problême nombre entier dans script.sh
Résolu/Fermé
snow_frog
Messages postés
216
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
26 juin 2020
-
11 mars 2009 à 12:58
snow_frog Messages postés 216 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 26 juin 2020 - 11 mars 2009 à 20:46
snow_frog Messages postés 216 Date d'inscription jeudi 5 février 2009 Statut Membre Dernière intervention 26 juin 2020 - 11 mars 2009 à 20:46
A voir également:
- Problême nombre entier dans script.sh
- Nombre facile - Télécharger - Outils professionnels
- Nombre de jours entre deux dates excel - Guide
- Ascii nombre de caractères - Guide
- Mettre un 0 devant un nombre dans excel - Guide
- Comment savoir le nombre de message dans une conversation sms ✓ - Forum Téléphones & tablettes Android
8 réponses
snow_frog
Messages postés
216
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
26 juin 2020
139
11 mars 2009 à 14:05
11 mars 2009 à 14:05
je viens de trouver une première étape: rempalcer -eq (pour nombre entier) par >
par contre, j'ai l'impression qu'il ne prend pas en compte mon "else" dans ma boucle if.
par contre, il m'inverse même les valeurs positives qui se retrouvent donc négative....
je veux juste que les valeurs négatives passent positive
par contre, j'ai l'impression qu'il ne prend pas en compte mon "else" dans ma boucle if.
if [ "$j" < 0 ] then ABS=$(echo "(0 - $j) " | bc) fi
par contre, il m'inverse même les valeurs positives qui se retrouvent donc négative....
je veux juste que les valeurs négatives passent positive
snow_frog
Messages postés
216
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
26 juin 2020
139
11 mars 2009 à 18:15
11 mars 2009 à 18:15
oups, petit probleme dans mon précedent post/script,
alors voilà, je recommence à zero....
mais voilà, quand je lance le script, il m'inverse bien le signe des valeurs négatives (boucle if then)
mais pour les valeurs positives, il m'inverse aussi le signe(normalement boucle if else)
pourquoi ne prend-il pas en compte mon else ?
alors voilà, je recommence à zero....
snow_frog@mars:~/Bureau/script$ ll releve_niveau_jeudi.txt releve_niveau_vendredi.txt snow_frog@mars:~/Bureau/script$ cat releve_niveau_vendredi.txt 06, -4.58 07, -4.37 08, 2.54 09, 3.78 snow_frog@mars:~/Bureau/script$ cat test #!/bin/bash DATA="releve_niveau*.txt" for DIR in `find -type d`; do # pour chaque répertoire présent dans rep courant for FILE in $DIR/$DATA ; do # pour chaque fichier $DATA présent dans ces répertoires for i in $FILE ; do # pour chaque ligne présent dans lignes présentent dans ces ficheri $FILE NIV=$(cut -d "," -f2 $i) # on garde la deuxième colonne uniquement. délimiteur de champs "virgule" for j in $NIV ; do # pour chaque ligne $j présent dans cette deuxième colonne isolé if [ "$j" < 0 ] # on cherche à savoir si cette valeur est plus petite que 0 (donc négative) then ABS=$(echo "(0 - $j) " | bc) # si valeur < 0 alors on l'a rend positive else ABS=$j # sinon on la laisse positive fi echo "pour $j l'absolu est $ABS done done done done
mais voilà, quand je lance le script, il m'inverse bien le signe des valeurs négatives (boucle if then)
mais pour les valeurs positives, il m'inverse aussi le signe(normalement boucle if else)
pourquoi ne prend-il pas en compte mon else ?
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 898
11 mars 2009 à 18:46
11 mars 2009 à 18:46
Salut,
Je ne pense pas que le shell bash accepte les signes < et > comme comparateur ;-\
De toutes façons si ce n'est que pour enlever le signe négatif, pas la peine de te prendre la tête :
Je ne pense pas que le shell bash accepte les signes < et > comme comparateur ;-\
De toutes façons si ce n'est que pour enlever le signe négatif, pas la peine de te prendre la tête :
[plop]$ cat fich 06, -4.58 07, -4.37 08, 2.54 09, 3.78 [plop]$ cat foo.sh #! /bin/sh #set -xv NIV=$(cut -d " " -f2 < $1) for j in $NIV ; do echo "pour $j l'absolu est ${j/-/}" done [plop]$ ./foo.sh fich pour -4.58 l'absolu est 4.58 pour -4.37 l'absolu est 4.37 pour 2.54 l'absolu est 2.54 pour 3.78 l'absolu est 3.78 [plop]$;-))
snow_frog
Messages postés
216
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
26 juin 2020
139
11 mars 2009 à 19:02
11 mars 2009 à 19:02
merci,
En fait, le but final étant de trouver la valeur la plus proche de 0 est d'afficher la ligne (les 2 colonnes) ou cette valeur est obtenue.
ce que je pensais faire, c'était d'abord convertir ma deuxieme colonne pour n'obtenir que des chiffre supérieur à 0 (ou inférieur peu importe) et ensuite de trier par ordre croissant et d'extraire la première ligne "sort -n | head -1" pour obtenir la valeur la plus proche de 0
Si je comprend bien, ta solution me permet "juste" d'afficher sans le signe moins ?
En fait, le but final étant de trouver la valeur la plus proche de 0 est d'afficher la ligne (les 2 colonnes) ou cette valeur est obtenue.
ce que je pensais faire, c'était d'abord convertir ma deuxieme colonne pour n'obtenir que des chiffre supérieur à 0 (ou inférieur peu importe) et ensuite de trier par ordre croissant et d'extraire la première ligne "sort -n | head -1" pour obtenir la valeur la plus proche de 0
Si je comprend bien, ta solution me permet "juste" d'afficher sans le signe moins ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 898
11 mars 2009 à 19:23
11 mars 2009 à 19:23
[plop]$ cat fich 06, -4.58 07, -4.37 08, 2.54 09, 3.78 [plop]$ cut -d " " -f2 < fich | tr -d '-' |sort -n | head -1 2.54 [plop]$
snow_frog
Messages postés
216
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
26 juin 2020
139
11 mars 2009 à 19:41
11 mars 2009 à 19:41
merci bien, ça fonctionne comme il faut,
par contre, ce que je veux, c'est retourner la valeur de la première et deuxième colonne (dans mon cas "08, 2.54" .
je pense donc utiliser un {print $1, $2} par contre, après plusieur essai, je ne vois pas ou l'inserer...
je me rappelle d'un sujet sur CCM qui permettait de "garder en mémoire" la ligne ou on satisfaisait à la commande mais je n'arrive plus à le retrouver...
par contre, ce que je veux, c'est retourner la valeur de la première et deuxième colonne (dans mon cas "08, 2.54" .
je pense donc utiliser un {print $1, $2} par contre, après plusieur essai, je ne vois pas ou l'inserer...
je me rappelle d'un sujet sur CCM qui permettait de "garder en mémoire" la ligne ou on satisfaisait à la commande mais je n'arrive plus à le retrouver...
jipicy
Messages postés
40842
Date d'inscription
jeudi 28 août 2003
Statut
Modérateur
Dernière intervention
10 août 2020
4 898
11 mars 2009 à 19:55
11 mars 2009 à 19:55
[plop]$ cat fich 06, -4.58 07, -4.37 08, 2.54 09, 3.78 [plop]$ sort -t '-' +1n fich | head -1 08, 2.54 [plop]$;-))
snow_frog
Messages postés
216
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
26 juin 2020
139
11 mars 2009 à 20:15
11 mars 2009 à 20:15
merci,
pour mon info, le +ln est associé à la commande sort ?
chez moi, j'obtiens une erreur avec ta ligne de commande juste au dessus
pour mon info, le +ln est associé à la commande sort ?
chez moi, j'obtiens une erreur avec ta ligne de commande juste au dessus
snow_frog
Messages postés
216
Date d'inscription
jeudi 5 février 2009
Statut
Membre
Dernière intervention
26 juin 2020
139
11 mars 2009 à 20:46
11 mars 2009 à 20:46
voilà comment je me suis débrouillé:
NIV=$(cut -d " " -f2 < $i | tr -d '-' | sort -n | head -1 )
CHECK=$(grep $NIV $i )
et là, ça m'affiche ma ligne entière!!
NIV=$(cut -d " " -f2 < $i | tr -d '-' | sort -n | head -1 )
CHECK=$(grep $NIV $i )
et là, ça m'affiche ma ligne entière!!