[Shell] Trier contenu d'un fichier - Commande sort
Résolu
Nemesis31
Messages postés
436
Date d'inscription
Statut
Membre
Dernière intervention
-
Max -
Max -
Bonjour,
je dois créer un script qui permet d'afficher la liste des photos dans l'ordre chronologique de prise de vue.
Afficher la liste des photos avec la date de prise de vue, j'ai pu le faire, comme vous pouvez le constater dans le fichier temp.txt
Pour avoir la date de prise de vue, si vous êtes sous Linux (et si vous voulez vous amusez avec vos fichiers ^^) il faudra au préalable télécharger le programme exiv2 (https://www.exiv2.org/download.html (il fonctionne aussi sous Windows, mais je doute que les commandes shell fonctionne ^^)
Il faut donc trier d'abord, en fonction de l'année, puis du mois, puis du jour, puis de l'heure, puis des minutes et enfin en fonction des secondes :)
Donc, je devrais obtenir quelque chose comme ceci:
Sauf que je n'obtiens pas du tout ça avec la commande sort !!
J'obtiens ceci (exemple):
A mon avis, je n'ai pas su utilisé la commande sort. Et il me semble que c'est la seule commande shell qui permette de trier....
Si quelqu'un passe par ici :)
Merci pour vos prochaines réponses !
je dois créer un script qui permet d'afficher la liste des photos dans l'ordre chronologique de prise de vue.
Afficher la liste des photos avec la date de prise de vue, j'ai pu le faire, comme vous pouvez le constater dans le fichier temp.txt
Arbres.JPG 2012:11:03 15:17:17 Fosse.JPG 2011:11:03 15:26:05 Fort_Foch.JPG 2012:11:02 11:46:08 Les Mam'zelles.JPG 2012:11:03 16:05:14 Vue_du_donjon.JPG 2012:11:03 15:19:48 Plan_3D.JPG 2012:11:03 15:16:20 Transilien.JPG 2012:10:29 18:02:20 Souvenirs.JPG 2012:11:03 16:02:27
Pour avoir la date de prise de vue, si vous êtes sous Linux (et si vous voulez vous amusez avec vos fichiers ^^) il faudra au préalable télécharger le programme exiv2 (https://www.exiv2.org/download.html (il fonctionne aussi sous Windows, mais je doute que les commandes shell fonctionne ^^)
Il faut donc trier d'abord, en fonction de l'année, puis du mois, puis du jour, puis de l'heure, puis des minutes et enfin en fonction des secondes :)
Donc, je devrais obtenir quelque chose comme ceci:
Fosse.JPG 2011:11:03 15:26:05 Transilien.JPG 2012:10:29 18:02:20 Fort_Foch.JPG 2012:11:02 11:46:08 Plan_3D.JPG 2012:11:03 15:16:20 Arbres.JPG 2012:11:03 15:17:17 Vue_du_donjon.JPG 2012:11:03 15:19:48 Souvenirs.JPG 2012:11:03 16:02:27 Les Mam'zelles.JPG 2012:11:03 16:05:14
Sauf que je n'obtiens pas du tout ça avec la commande sort !!
J'obtiens ceci (exemple):
$ sort -n temp.txt -t : -k2n,2n -k3n,3n Transilien.JPG 2012:10:29 18:02:20 Fort_Foch.JPG 2012:11:02 11:46:08 Arbres.JPG 2012:11:03 15:17:17 Fosse.JPG 2011:11:03 15:26:05 Plan_3D.JPG 2012:11:03 15:16:20 Vue_du_donjon.JPG 2012:11:03 15:19:48 Les Mam'zelles.JPG 2012:11:03 16:05:14 Souvenirs.JPG 2012:11:03 16:02:27
A mon avis, je n'ai pas su utilisé la commande sort. Et il me semble que c'est la seule commande shell qui permette de trier....
Si quelqu'un passe par ici :)
Merci pour vos prochaines réponses !
A voir également:
- [Shell] Trier contenu d'un fichier - Commande sort
- Fichier bin - Guide
- Comment réduire la taille d'un fichier - Guide
- Comment ouvrir un fichier epub ? - Guide
- Invite de commande - Guide
- Trier un tableau excel - Guide
3 réponses
Bonjour,
Il y a un problème dans ton fichier en entrée.
La commande sort doit être en mesure déterminer les différents champs.
Ici, le caractère espace " " est un séparateur, mais est aussi contenu dans un nom de fichier (Les Mam'zelles).
Il faudra absolument changer celà, sinon la commande sort ne s'y retrouvera jamais...
J'occulte ce problème dans mon exemple : je remplace cet espace par un '_'.
Ensuite, tu spécifies l'utilisation du caractères séparateur ":".
Dans ce cas, le fichier contiendra 5 champs, et trier sur les champs 2 et 3 n'aura pas de sens.
Pas besoin de spécifier de séparateur, l'espace (par défaut) conviendra très bien, car il suffit de trier les chaînes complètes, sans séparer année/mois/jour et heure/minutes/secondes.
Ca fonctionne tout simplement comme ça :
$> cat test
Arbres.JPG 2012:11:03 15:17:17
Fosse.JPG 2011:11:03 15:26:05
Fort_Foch.JPG 2012:11:02 11:46:08
Les_Mam'zelles.JPG 2012:11:03 16:05:14
Vue_du_donjon.JPG 2012:11:03 15:19:48
Plan_3D.JPG 2012:11:03 15:16:20
Transilien.JPG 2012:10:29 18:02:20
Souvenirs.JPG 2012:11:03 16:02:27
$> sort -k2,3 test
Fosse.JPG 2011:11:03 15:26:05
Transilien.JPG 2012:10:29 18:02:20
Fort_Foch.JPG 2012:11:02 11:46:08
Plan_3D.JPG 2012:11:03 15:16:20
Arbres.JPG 2012:11:03 15:17:17
Vue_du_donjon.JPG 2012:11:03 15:19:48
Souvenirs.JPG 2012:11:03 16:02:27
Les_Mam'zelles.JPG 2012:11:03 16:05:14
Il y a un problème dans ton fichier en entrée.
La commande sort doit être en mesure déterminer les différents champs.
Ici, le caractère espace " " est un séparateur, mais est aussi contenu dans un nom de fichier (Les Mam'zelles).
Il faudra absolument changer celà, sinon la commande sort ne s'y retrouvera jamais...
J'occulte ce problème dans mon exemple : je remplace cet espace par un '_'.
Ensuite, tu spécifies l'utilisation du caractères séparateur ":".
Dans ce cas, le fichier contiendra 5 champs, et trier sur les champs 2 et 3 n'aura pas de sens.
Pas besoin de spécifier de séparateur, l'espace (par défaut) conviendra très bien, car il suffit de trier les chaînes complètes, sans séparer année/mois/jour et heure/minutes/secondes.
Ca fonctionne tout simplement comme ça :
$> cat test
Arbres.JPG 2012:11:03 15:17:17
Fosse.JPG 2011:11:03 15:26:05
Fort_Foch.JPG 2012:11:02 11:46:08
Les_Mam'zelles.JPG 2012:11:03 16:05:14
Vue_du_donjon.JPG 2012:11:03 15:19:48
Plan_3D.JPG 2012:11:03 15:16:20
Transilien.JPG 2012:10:29 18:02:20
Souvenirs.JPG 2012:11:03 16:02:27
$> sort -k2,3 test
Fosse.JPG 2011:11:03 15:26:05
Transilien.JPG 2012:10:29 18:02:20
Fort_Foch.JPG 2012:11:02 11:46:08
Plan_3D.JPG 2012:11:03 15:16:20
Arbres.JPG 2012:11:03 15:17:17
Vue_du_donjon.JPG 2012:11:03 15:19:48
Souvenirs.JPG 2012:11:03 16:02:27
Les_Mam'zelles.JPG 2012:11:03 16:05:14
Je me doutais bien qu'il y aurait un problème avec les espaces.
Mais ce n'est pas moi qui décide des noms de fichiers : c'est la personne qui a fait le sujet du projet, et nous (=étudiants) nous devons d'utiliser nos scripts sur leurs fichiers photos.
Cependant, ce n'est pas vraiment spécifier si oui ou non non a le droit de rajouter des _ aux noms de fichiers...
Si tu veux voir le sujet du projet : www.pouick.fr/downloads/mini_projet_2012.pdf
Je vais essayer avec l'underscore:) Encore merci !!