Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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 smile

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 smile

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