trier une variable tableau avec bash

Le
freegate
Bonjour,

Mon script possède un tableau myrep ayant trois valeurs contenant des dates.
La commande ${myrep[*]} affiche
03-06-2011 20-05-2011 27-05-2011.

J'aimerais récupérer dans une autre variable la valeur la plus ancienne
du tableau (en terme de date) soit le 20-05-2011.

Comment puis-je m'y prendre ?

Cordialement.
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Benoit Izac
Le #23419061
Bonjour,

le 04/06/2011 à 00:43, freegate message
Mon script possède un tableau myrep ayant trois valeurs contenant des dates.
La commande ${myrep[*]} affiche
03-06-2011 20-05-2011 27-05-2011.

J'aimerais récupérer dans une autre variable la valeur la plus
ancienne du tableau (en terme de date) soit le 20-05-2011.

Comment puis-je m'y prendre ?



for date in "${myrep[@]}"; do
echo $date;
done | sort -n -t '-' -k 3 -k 2 -k 1 | head -n 1

--
Benoit Izac
Nicolas George
Le #23419141
freegate , dans le message écrit :
Mon script possède un tableau myrep ayant trois valeurs contenant des dates.
La commande ${myrep[*]} affiche
03-06-2011 20-05-2011 27-05-2011.



Commence par écrire tes dates de manière logique : 2011-03-06 2011-05-20
2011-05-27.
Benoit Izac
Le #23419131
Dans le message écrit :

Mon script possède un tableau myrep ayant trois valeurs contenant des
dates. La commande ${myrep[*]} affiche
03-06-2011 20-05-2011 27-05-2011.

J'aimerais récupérer dans une autre variable la valeur la plus
ancienne du tableau (en terme de date) soit le 20-05-2011.

Comment puis-je m'y prendre ?



for date in "${myrep[@]}"; do
echo $date;
done | sort -n -t '-' -k 3 -k 2 -k 1 | head -n 1



Un peu plus court (et ça va intéresser François, encore un usage de
$IFS !) :

o=$({ IFS=$'n';echo "${myrep[*]}";}|sort -n -t- -k3 -k2 -k1|head -n1)

--
Benoit Izac
Tonton Th
Le #23420061
On 06/04/2011 09:20 AM, Benoit Izac wrote:

sort -n -t '-' -k 3 -k 2 -k 1



Joli !

--
Je cherche un nouveau travail...
http://tboudet.free.fr/cv-thierry-boudet.pdf
http://sigfood.dinorama.fr/
Erwan David
Le #23420361
Tonton Th
On 06/04/2011 09:20 AM, Benoit Izac wrote:

sort -n -t '-' -k 3 -k 2 -k 1



Joli !



Mais il y a un piège (qui ici ne piège pas, mais autant faire attention
tout de suite.

Pour trier sur une seule colonne à chaque fois il faut un
sort -k3,3 -k2,2 -k1,1

Et si en plus on n'est pas sûr d'avoir des 0 devant les valeurs qui
s'écrivent en un seul chiffre

sort -k3,3n -k2,2n -k1,1n




--
Le travail n'est pas une bonne chose. Si ça l'était,
les riches l'auraient accaparé
moi-meme
Le #23421701
Le Sat, 04 Jun 2011 10:16:13 +0200, Benoit Izac a écrit :

Un peu plus court (et ça va intéresser François, encore un usage de $IFS
!) :

o=$({ IFS=$'n';echo "${myrep[*]}";}|sort -n -t- -k3 -k2 -k1|head -n1)



chapeau : combien d'années de pratique ?
Benoit Izac
Le #23422471
Bonjour,

le 04/06/2011 à 20:55, moi-meme a écrit dans le message

o=$({ IFS=$'n';echo "${myrep[*]}";}|sort -n -t- -k3 -k2 -k1|head -n1)



chapeau : combien d'années de pratique ?



J'ai découvert Linux en 1998 et ça doit faire à peine moins d'une
dizaine d'années que je n'utilise plus que ça (et des BSD) pour mes
machines personnelles. Je précise tout de même que c'est un hobby, je ne
travaille pas dans le secteur informatique.

D'un autre coté, j'utilise Windows depuis une vingtaine d'année
(essentiellement pour mon travail maintenant) et je suis tout bonnement
incapable de résoudre ce type de problème avec cet OS sans installer un
cygwin, Perl ou un compilateur C.

--
Benoit Izac
xavier
Le #23423041
Benoit Izac
D'un autre coté, j'utilise Windows depuis une vingtaine d'année
(essentiellement pour mon travail maintenant) et je suis tout bonnement
incapable de résoudre ce type de problème avec cet OS sans installer un
cygwin, Perl ou un compilateur C.



Il y a quand même un progrès avec PowerShell.

Mais comme je ne maîtrise pas, je continue à installer StrawberryPerl
sur mes serveurs Windows :-)

--
XAv
In your pomp and all your glory you're a poorer man than me,
as you lick the boots of death born out of fear.
(Jethro Tull)
Sergio
Le #23423071
Le 05/06/2011 11:42, Xavier a écrit :
Benoit Izac
D'un autre coté, j'utilise Windows depuis une vingtaine d'année
(essentiellement pour mon travail maintenant) et je suis tout bonnement
incapable de résoudre ce type de problème avec cet OS sans installer un
cygwin, Perl ou un compilateur C.



Il y a quand même un progrès avec PowerShell.



Pas trop étudié le truc, mais il a un gros défaut : Il n'est pas évident de passer d'une suite de commandes à un script. Alors, que
ce soit avec les .BAT ou les shell Unix, la transition est facile : il suffit de mettre les commandes bout à bout, et la curiosité
aidant, en lisant un peu la doc, on arrive à faire des trucs puissants.

Pas le cas de Powershell : faut tout reprendre à zéro.

--
Serge http://leserged.online.fr/
Mon blog: http://cahierdesergio.free.fr/
Soutenez le libre: http://www.framasoft.org
Freegate
Le #23423601
Le 04/06/2011 04:11, Nicolas George a écrit :
freegate , dans le message écrit :
Mon script possède un tableau myrep ayant trois valeurs contenant des dates.
La commande ${myrep[*]} affiche
03-06-2011 20-05-2011 27-05-2011.



Commence par écrire tes dates de manière logique : 2011-03-06 2011-05-20
2011-05-27.




C'était la solution de dernier recours au cas où il n'y avait pas
d'autres solutions, puisque ces dates sont en fait des répertoires de
sauvegarde et un ls ou un ls -R m'aurait permis d'avoir un tri
parfaitement conforme.

Mais je voulais pour faciliter la restauration auprès de mes
utilisateurs, avoir des répertoires de sauvegarde parfaitement lisibles
dans le système français.
Publicité
Poster une réponse
Anonyme