Tri par date et heure d'un fichier texte

Fermé
Kalabstray - 11 janv. 2013 à 08:13
 Kalabstray - 11 janv. 2013 à 13:09
Bonjour,

Je suis nouvelle sur le forum...
N'ayant pas trouvé de réponse précise pouvant m'aider, je me permet de poser ma question...
J'ai un fichier texte qui se présente comme suit:

12-21-12 05:05PM 327257 fichier1.txt
12-11-12 11:08AM 266839 fichier2.txt
12-20-12 06:28AM 231545 fichier3.txt
12-20-12 08:07PM 348379 fichier4.txt
12-19-12 01:29AM 194062 fichier5.txt
12-19-12 09:59AM 262867 fichier6.txt
12-19-12 05:48PM 319165 fichier7.txt
12-18-12 04:31AM 216311 fichier8.txt
...

Cette commande me permet de trier les dates:

awk -F - '{print $2"/"$1"/"$3}' files_to_transfer > step1
sort -n -r -t / -k 3 -k 2 -k 1 step1 > step2

Du coup dans step2 j'ai mes fichiers triés par date en ordre décroissant:

10/01/13 12:58AM 190515 fichier.txt
10/01/13 12:44AM 190224 fichiern.txt
10/01/13 12:39AM 185775 fichiera.txt
10/01/13 12:24AM 185304 fichierx.txt
10/01/13 12:19AM 184809 truc.txt
10/01/13 12:15PM 274050 machin.txt
10/01/13 12:08AM 184809 brol.txt

Comme vous le voyez, les heures sont mal triées...

Comment puis-je faire, de manière plus ou moins simple, faire un tri sur les dates et puis sur l'heure sans "déranger" l'ordre des dates?

Merci d'avance pour votre aide!

A voir également:

6 réponses

salut,

Comment est rempli le fichier files_to_transfer?
Tu ne peux pas utiliser 'ls' ? Il a des options pour trier.
Pourquoi faire un tri? Ce sont tous des fichiers à déplacer.
0
Hello,

Le fichier est rempli comme ceci :

ftp -nv $SOURCE <<! > files_to_tranfer
user $USER $PASSWD
cd T_KMI
ls -lrt
!

(ce n'est pas mon script, je dois modifier celui de quelqu'un d'autre)

Malheureusement, le serveur ftp en question trie sur les noms de fichiers quelles que soient les options que j'ajoute à ls... Du coup, le fichier que je reçois contient la liste des fichiers présents comme mis dans l'exemple mais ils sont triés par nom et pas par date ...
0
Pierre8888 Messages postés 1053 Date d'inscription mercredi 17 octobre 2012 Statut Membre Dernière intervention 17 mai 2015 165
11 janv. 2013 à 09:19
Bonjour je suppose que tu a Ubuntu ? il existe plusieurs façon de trier par date et heure d'un fichier texte dans ton /home/ dossier personnel "guide du bureau Ubuntu fichiers " Tri des fichiers et des dossiers http://guide.ubuntu-fr.org/desktop/files-sort.html et là "Dossier magique : tri automatique de fichiers" http://doc.ubuntu-fr.org/dossier_magique
0
Je vais regarder ça, merci! Mais l'ennui c'est que les commandes que je peux passer sur ce ftp sont extrêmement limitées vu que c'est celui d'une société qui nous fournit ces données. Tout ce que je peux faire dessus c'est du download.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 415
11 janv. 2013 à 09:27
Salut,

Essaye avec ça :

$ cat fic 
12-21-12 05:05PM 327257 fichier1.txt
12-11-12 11:08AM 266839 fichier2.txt
12-20-12 06:28AM 231545 fichier3.txt
12-20-12 08:07PM 348379 fichier4.txt
12-19-12 01:29AM 194062 fichier5.txt
12-19-12 09:59AM 262867 fichier6.txt
12-19-12 05:48PM 319165 fichier7.txt
12-18-12 04:31AM 216311 fichier8.txt

$ awk -F - '{print $2"/"$1"/"$3}' fic | sort -k1nr -k2.6r,2n 
21/12/12 05:05PM 327257 fichier1.txt
20/12/12 06:28AM 231545 fichier3.txt
20/12/12 08:07PM 348379 fichier4.txt
19/12/12 01:29AM 194062 fichier5.txt
19/12/12 09:59AM 262867 fichier6.txt
19/12/12 05:48PM 319165 fichier7.txt
18/12/12 04:31AM 216311 fichier8.txt
11/12/12 11:08AM 266839 fichier2.txt

$

0
Merci à tous! J'ai finalement trouvé. Je partage ma solution ici au cas où ça pourrait aider quelqu'un dans le futur:

awk -F " " '{print $1"/"$2"/"$3"/"$4}' files_to_transfer > step1.txt

awk -F - '{print $2"/"$1"/"$3}' step1.txt > step2.txt

awk -F : 'BEGIN{FS=":"}
substr($2,3,2) == "PM" {print substr($1,1,9) substr($1,10,2)+12 "/"substr($2,1,2)"/"substr($2,3,2)"/"substr($2,6,56)}
substr($2,3,2) == "AM" {print $1"/"substr($2,1,2)"/"substr($2,3,2)"/"substr($2,6,56)}

END {print"fini"}' step2.txt > step3.txt

sort -n -r -t / -k 3 -k 2 -k 1 -k 4 -k 5 step3.txt > step4.txt

awk -F "/" '{print $1"/"$2"/"$3" "$4":"$5$6" "$7 " "$8}' step4.txt > step5.txt
cp step5.txt files_to_transfer

Il y a surement plus simple et plus propre mais ça fonctionne!
0