Pages : 1
#1 Le 11/10/2010, à 15:28
- jhoncoke
Réduire le nombre de décimales
Bonjour,
J'ai un fichier texte avec 2 colonnes et je voudrais réduire le nombre de décimales de la deuxième colonne pour en avoir qu'un chiffre après la virgule... Tout ça en bash ou shell
Quelqu'un aurait une idée?
Merci
Hors ligne
#2 Le 11/10/2010, à 15:40
- AnsuzPeorth
Re : Réduire le nombre de décimales
Bjr,
Tu peux t'amuser avec sed.
Ou alors y'a printf qui pourrait faire également.
Entre autres ...
Interface graphique pour bash, python ou autre: glade2script
Support Tchat: http://chat.jabberfr.org/muckl_int/inde … ade2script (Hors ligne)
Hors ligne
#3 Le 11/10/2010, à 15:55
- chopinhauer
Re : Réduire le nombre de décimales
Donc, comme disait AnzusPeorth, tu peux faire un read + printf, un sed qui coupe les dernières chiffres ou sinon je te conseille awk:
awk '{$2=sprintf("%.2f",$2);print}' fichier.txt
PS: Si tu veux utiliser printf fait gaffe au locale:
export LANG=""
while read -a name; do
name[1]=`printf %.2f ${name[1]}`
echo ${name[@]}
done
Dernière modification par chopinhauer (Le 11/10/2010, à 16:01)
Pensez à donner un bon titre à vos sujets : cela permettra d'aider d'autres utilisateurs dans votre même situation. Ce n'est pas qu'en donnant des solutions qu'on aide, mais aussi en posant des bonnes questions et… facilement trouvables.
Hors ligne
#4 Le 11/10/2010, à 15:56
- claudius01
Re : Réduire le nombre de décimales
Bonjour,
$ echo "value 987.12345" | awk '{printf("%s %.1f\n", $1, $2);}'
value 987.1
Cordialement, A+
--
Claudius
Hors ligne
#5 Le 11/10/2010, à 16:14
- jhoncoke
Re : Réduire le nombre de décimales
Merci... Ca marche
Hors ligne
#6 Le 11/10/2010, à 16:19
- Totor
Re : Réduire le nombre de décimales
il faut effectivement faire attention aux locales mais aussi aux arrondis.
tout dépend donc de la précision souhaitée.
Pour exemple (même chose avec awk) :
export LANG=""
while read -a cols; do
printf "%s\t%.1f\n" "${cols[@]}"
done <<< "col1 1.16"
résultat : "col1 1.2"
pour ne pas avoir d'arrondi :
# à condition qu'il y ait toujours au moins 1 chiffre en décimal
export LANG=""
while read -a cols; do
cols[1]=${cols[1]%${cols[1]##*.?}}
printf "%s\t%.1f\n" "${cols[@]}"
done < fichier
# si il peut ne pas y avoir de chiffre en décimal
awk ' { $2=sprintf("%d", $2*10)/10; print } ' fichier
-- Lucid Lynx --
Hors ligne