Trier la somme des nombres
gcm
-
gcm -
gcm -
Bonjour à tous, je bloque sur un exercice depuis un moment, si quelqu'un peut m'aider s'il vous plait!
Écrire un script, nommé sommeNombresEtTri, prenant sur son flux d'entrée des lignes contenant deux entiers naturels, séparés par un signe d'addition, possiblement entourés de blancs, les sommant et triant le résultat par ordre décroissant de somme.
% cat data
1 + 2
3+4
1 +3
% sommeNombresEtTri < data
3 + 4 = 7
1 + 3 = 4
1 + 2 = 3
J'ai tenté d'y répondre avec awk, cependant cela ne marcche pas sur tous les exemples:
#! /bin/bash
awk -F '+' '{ print $1 "+" $2 " = " $1+$2 }'
Merci
Écrire un script, nommé sommeNombresEtTri, prenant sur son flux d'entrée des lignes contenant deux entiers naturels, séparés par un signe d'addition, possiblement entourés de blancs, les sommant et triant le résultat par ordre décroissant de somme.
% cat data
1 + 2
3+4
1 +3
% sommeNombresEtTri < data
3 + 4 = 7
1 + 3 = 4
1 + 2 = 3
J'ai tenté d'y répondre avec awk, cependant cela ne marcche pas sur tous les exemples:
#! /bin/bash
awk -F '+' '{ print $1 "+" $2 " = " $1+$2 }'
Merci
A voir également:
- Trier la somme des nombres
- Excel trier par ordre croissant chiffre - Guide
- Formule somme excel colonne - Guide
- Somme si couleur - Guide
- Code binaire des nombres - Guide
- Logiciel pour trier les photos automatiquement - Guide
2 réponses
Salut,
Une solution avec "sort" :
;-))
Une solution avec "sort" :
awk -F '+' '{ print $1 "+" $2 " = " $1+$2 }' data | sort -r -t '=' +1
;-))
Salut,
:~$ cat fic 110 + 2 32+4 10 +3 :~$ awk -F'[ +]+' '{ print $1 " + " $2 " = " $1+$2 | "sort -t= -k 2 -n"}' fic 10 + 3 = 13 32 + 4 = 36 110 + 2 = 112 :~$ awk -F'[ +]+' '{ print $1 " + " $2 " = " $1+$2 | "sort -t= -k 2 -nr"}' fic 110 + 2 = 112 32 + 4 = 36 10 + 3 = 13
Petit réflexe à adopter, lire les pages de "man" ;-))
Extrait du man sort :
Bonus :
Extrait du man sort :
-t, --field-separator=SEP use SEP instead of non-blank to blank transition
Bonus :
-t caractère_séparateur Utiliser le caractère_séparateur afin de distinguer les champs pour rechercher la clé de tri sur chaque ligne. Par défaut le séparateur de champs est une chaîne blanche entre chaînes non-blanches. Ceci signifie qu'avec l'entrée ' foo bar', sort distingue deux champs ' foo' et ' bar'. Le séparateur n'appartient ni au champ précédent, ni au champ suivant.
[ +]+ c'est une regex, plus exacte c'est une classe de caractères (les crochets) qui contient un espace et un signe +
Le + à l'extérieur de la classe (les crochets) est un quantificateur
On peu utiliser '+' mais en ce cas regarde l'affichage
Le + à l'extérieur de la classe (les crochets) est un quantificateur
On peu utiliser '+' mais en ce cas regarde l'affichage
:~$ awk -F'+' '{ print $1 " + " $2 " = " $1+$2 | "sort -t= -k 2 -n"}' fic 10 + 3 = 13 32 + 4 = 36 110 + 2 = 112 r:~$ awk -F'[ +]+' '{ print $1 " + " $2 " = " $1+$2 | "sort -t= -k 2 -n"}' fic 10 + 3 = 13 32 + 4 = 36 110 + 2 = 112
Ca ne marche pas chez moi
Le champ à prendre en compte. Ici c'est le 2ème champ vu qu'on a défini le délimiteur comme étant "=" (-t '='), et sous cette forme les champs commencent à zéro :
0 1 2 3 etc
Donc le 2ème est 1.
Avec la forme employée par "lami20j" ci-dessous (-k 2), les champs comment à 1.
Bizarre ;-\