#1 Le 09/05/2025, à 13:42
- arnoxz
Commande sort - classement et tri d'un fichier texte.
Bonjour,
J'ai une question purement linux pour la commande sort.
J'ai un fichier log contenant plusieurs informations dont je voudrais extraire dans l'ordre descendant 2 lignes utiles contenant les mots clef (fr et nl).
Pour les mot-clefs ca fonctionne, ce que je voudrais ensuite c'est que les dates (non linux / unix) issues d'une création manuelle soient dans un ordre plus ancien au plus récent pour les 2 lignes (en alternance pour les mêmes dates FR + NL) à chaque fois.
Cette option me sort d'abord tous les fr, puis tous les nl avec les dates dans le désordre, ce n'est pas ce que je veux
sort -nk1 /tmp/sodm.log | grep -E "\nl|\fr"
......
.....
On duty (fr): 29/03/2025,Cah DaU,012345678
On duty (fr): 29/04/2025,LiS Du Mie,012345678
On duty (fr): 30/03/2025,Cah DaU,012345678
On duty (fr): 30/04/2025,Win Bou,012345678
On duty (fr): 31/03/2025,Suy Sze,012345678
.....
.....
On duty (nl): 29/03/2025,Valm Vax Mlk,012345678
On duty (nl): 29/04/2025,LiS Du Mie,012345678
On duty (nl): 30/03/2025,Valm Vax Mlk,012345678
On duty (nl): 30/04/2025,LiS Du Mie,012345678
On duty (nl): 31/03/2025,Suy Sze,012345678
En agissant sur la 4ème colonne (pas certain de l'option choisie), j'ai bien une alternance FR / NL pour les mêmes dates, par contre les dates ne sont pas sorties dans l'ordre espéré (dates mélangées).
Comment puis-je sortir (en gardant alternance fr / nl) la séquence [1-31]/[1-12]/[2022-∞] --> donc les dates devraient être les plus anciennes vers la plus récentes.
Car actuellement c'est dans le désordre pour les dates des deux "groupes" (fr et nl) ?
sort -nk4 /tmp/sodm.log | grep -E "\nl|\fr"
On duty (fr): 29/04/2025,LiS Du Mie,012345678
On duty (nl): 29/03/2025,Valm Vax Mlk,012345678
On duty (nl): 29/04/2025,LiS Du Mie,012345678
On duty (fr): 30/03/2025,Cah DaU,012345678
On duty (fr): 30/04/2025,Win Bou,012345678
On duty (nl): 30/03/2025,Valm Vax Mlk,012345678
On duty (nl): 30/04/2025,LiS Du Mie,012345678
On duty (fr): 31/03/2025,Suy Sze,012345678
On duty (nl): 31/03/2025,Suy Sze,012345678
dans cet extrait / exemple 04 (avril) sort parfois avant 03 (mars), pour les années il n'y a que 2025 mais je crains que le problème soit aussi présent si plusieurs années existent.
Ce que je recherche à extraire serait ceci (aussi, le mot clef grep pourrait être sur "on duty" qui ne se trouve nulle part ailleurs dans le fichier :
.......
.........
On duty (nl): 29/03/2025,Valm Vax Mlk,012345678
On duty (fr): 30/03/2025,Cah DaU,012345678
On duty (nl): 30/03/2025,Valm Vax Mlk,012345678
On duty (fr): 31/03/2025,Suy Sze,012345678
On duty (nl): 31/03/2025,Suy Sze,012345678
.....
.....
On duty (fr): 29/04/2025,LiS Du Mie,012345678
On duty (nl): 29/04/2025,LiS Du Mie,012345678
On duty (fr): 30/04/2025,Win Bou,012345678
On duty (nl): 30/04/2025,LiS Du Mie,012345678
....
Merci
Dernière modification par arnoxz (Le 09/05/2025, à 13:55)
Hors ligne
#2 Le 09/05/2025, à 14:35
- Watael
Re : Commande sort - classement et tri d'un fichier texte.
salut,
grep -E "\nl|\fr", c'est pour quoi faire les contre barre oblique ?
une date n'est pas un nombre, c'est une expression. Pour trier des dates il faut les convertir en nombre de secondes depuis 1970 (Epoch = 1970-01-01 00:00 UTC).
il va donc falloir aller plus loin qu'une simple ligne de commandes, et scripter le traitement, et vu qu'il y a de la sélection à faire, j'opterais pour Gawk comme langage - il peut sélectionner des lignes, convertir une date, construire des tableaux, trier ses tableaux, etc.
Dernière modification par Watael (Le 09/05/2025, à 14:35)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#3 Le 09/05/2025, à 14:41
- erresse
Re : Commande sort - classement et tri d'un fichier texte.
Bonjour,
Utilise --key et --reverse pour définir les critères sur lesquels tu veux trier. Voir le man sort.
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#4 Le 09/05/2025, à 15:07
- arnoxz
Re : Commande sort - classement et tri d'un fichier texte.
salut,
grep -E "\nl|\fr", c'est pour quoi faire les contre barre oblique ?
une date n'est pas un nombre, c'est une expression. Pour trier des dates il faut les convertir en nombre de secondes depuis 1970 (Epoch = 1970-01-01 00:00 UTC).
il va donc falloir aller plus loin qu'une simple ligne de commandes, et scripter le traitement, et vu qu'il y a de la sélection à faire, j'opterais pour Gawk comme langage - il peut sélectionner des lignes, convertir une date, construire des tableaux, trier ses tableaux, etc.
Les contre barre oblique ont été un jour définies par convention dans le script initial...
En effet ici, ce n'est pas une date ('date')... néanmoins, il doit être possible de traiter la colonne "année" puis "mois" puis 'jour' en terme de chiffre sur les collonnes ou position des caractères (j'ai l'impression que cela doit être possible de faire plusieurs traitements de données pour aboutir à un résultat d'affichage) ?
Dernière modification par arnoxz (Le 09/05/2025, à 15:10)
Hors ligne
#5 Le 09/05/2025, à 15:09
- arnoxz
Re : Commande sort - classement et tri d'un fichier texte.
Bonjour,
Utilise --key et --reverse pour définir les critères sur lesquels tu veux trier. Voir le man sort.
je vais essayer de comprendre, mais surtout de pouvoir effectuer l'action sur les sections appropriées... s'il existe d'autres manières (mais je pense que sort est approprié) n'hésite pas :-)
Hors ligne
#6 Le 09/05/2025, à 15:42
- erresse
Re : Commande sort - classement et tri d'un fichier texte.
Je pense que cette documentation devrait suffire à te dépanner.
Note: Tu peux exprimer ton critère de tri avec cette formule : N° du champ . Position début , Taille.
Ce qui pour la date de ton exemple, donnerait :
sort -k 1.7,4 -k 1.4,2 -k 1.1,2 fichier_à_trier
Dernière modification par erresse (Le 09/05/2025, à 16:04)
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#7 Le 09/05/2025, à 16:30
- nany
Re : Commande sort - classement et tri d'un fichier texte.
Bonjour,
sort -n -k 4.7 -k 4.4 -k 4 /tmp/sodm.log | grep -E "nl|fr"
Dernière modification par nany (Le 09/05/2025, à 16:51)
Hors ligne
#8 Le 09/05/2025, à 16:55
- geole
Re : Commande sort - classement et tri d'un fichier texte.
Bonjour
L'impression que les options de positionnement ne fonctionnent pas très bien.
sort -n -k 4.9 -k 4.5 -k 4 Tri.txt
On duty (fr): 29/04/2022,LiS Du Mie,012345678
On duty (nl): 29/03/2022,Valm Vax Mlk,012345678
On duty (nl): 29/04/2022,LiS Du Mie,012345678
On duty (fr): 30/03/2022,Cah DaU,012345678
On duty (nl): 11/03/2025,Suy Sze,012345678
On duty (fr): 30/04/2025,Win Bou,012345678
On duty (nl): 30/04/2025,LiS Du Mie,012345678
On duty (fr): 31/03/2025,Suy Sze,012345678
On duty (nl): 31/03/2025,Valm Vax Mlk,012345678
sort -n -k 4.2 Tri.txt
On duty (nl): 11/03/2025,Suy Sze,012345678
On duty (fr): 29/04/2022,LiS Du Mie,012345678
On duty (nl): 29/03/2022,Valm Vax Mlk,012345678
On duty (nl): 29/04/2022,LiS Du Mie,012345678
On duty (fr): 30/03/2022,Cah DaU,012345678
On duty (fr): 30/04/2025,Win Bou,012345678
On duty (nl): 30/04/2025,LiS Du Mie,012345678
On duty (fr): 31/03/2025,Suy Sze,012345678
On duty (nl): 31/03/2025,Valm Vax Mlk,012345678
sort -k4.7 Tri.txt
On duty (fr): 30/03/2022,Cah DaU,012345678
On duty (nl): 29/03/2022,Valm Vax Mlk,012345678
On duty (fr): 31/03/2025,Suy Sze,012345678
On duty (nl): 11/03/2025,Suy Sze,012345678
On duty (nl): 31/03/2025,Valm Vax Mlk,012345678
On duty (fr): 29/04/2022,LiS Du Mie,012345678
On duty (nl): 29/04/2022,LiS Du Mie,012345678
On duty (nl): 30/04/2025,LiS Du Mie,012345678
On duty (fr): 30/04/2025,Win Bou,012345678
sort -k4.10 Tri.txt
On duty (fr): 30/03/2022,Cah DaU,012345678
On duty (fr): 29/04/2022,LiS Du Mie,012345678
On duty (nl): 29/04/2022,LiS Du Mie,012345678
On duty (nl): 29/03/2022,Valm Vax Mlk,012345678
On duty (nl): 30/04/2025,LiS Du Mie,012345678
On duty (fr): 31/03/2025,Suy Sze,012345678
On duty (nl): 11/03/2025,Suy Sze,012345678
On duty (nl): 31/03/2025,Valm Vax Mlk,012345678
On duty (fr): 30/04/2025,Win Bou,012345678
Dernière modification par geole (Le 09/05/2025, à 17:04)
Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
Je défie QUICONQUE de trouver une discussion où j'aurais suggéré de remplacer un SSD par un disque dur.
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248
En ligne
#9 Le 09/05/2025, à 17:12
- erresse
Re : Commande sort - classement et tri d'un fichier texte.
Il te faut déterminer les bonnes positions dans le champ.
Ta date est dans le champ 4 et l'année est en 7 (sur 4), le mois en 4 (sur 2) et le jour en 1 (sur 2 aussi).
Par ailleurs, puisque tu veux un tri en ordre inverse, il te faut aussi l'option --reverse.
Dernière modification par erresse (Le 09/05/2025, à 17:13)
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#10 Le 09/05/2025, à 17:19
- geole
Re : Commande sort - classement et tri d'un fichier texte.
Lorsque cette commande me donne ce résultat
sort -n -k 4.2 Tri.txt
On duty (nl): 11/03/2025,Suy Sze,012345678
On duty (fr): 29/04/2022,LiS Du Mie,012345678
On duty (nl): 29/03/2022,Valm Vax Mlk,012345678
On duty (nl): 29/04/2022,LiS Du Mie,012345678
On duty (fr): 30/03/2022,Cah DaU,012345678
On duty (fr): 30/04/2025,Win Bou,012345678
On duty (nl): 30/04/2025,LiS Du Mie,012345678
On duty (fr): 31/03/2025,Suy Sze,012345678
On duty (nl): 31/03/2025,Valm Vax Mlk,012345678
Je pense que je devrais avoir quelque chose comme cela
On duty (fr): 30/03/2022,Cah DaU,012345678
On duty (fr): 30/04/2025,Win Bou,012345678
On duty (nl): 30/04/2025,LiS Du Mie,012345678
On duty (nl): 11/03/2025,Suy Sze,012345678
On duty (fr): 31/03/2025,Suy Sze,012345678
On duty (nl): 31/03/2025,Valm Vax Mlk,012345678
On duty (fr): 29/04/2022,LiS Du Mie,012345678
On duty (nl): 29/03/2022,Valm Vax Mlk,012345678
On duty (nl): 29/04/2022,LiS Du Mie,012345678
Lorsque cette commande me donne ce résultat
sort -k4.7 Tri.txt
On duty (fr): 30/03/2022,Cah DaU,012345678
On duty (nl): 29/03/2022,Valm Vax Mlk,012345678
On duty (fr): 31/03/2025,Suy Sze,012345678
On duty (nl): 11/03/2025,Suy Sze,012345678
On duty (nl): 31/03/2025,Valm Vax Mlk,012345678
On duty (fr): 29/04/2022,LiS Du Mie,012345678
On duty (nl): 29/04/2022,LiS Du Mie,012345678
On duty (nl): 30/04/2025,LiS Du Mie,012345678
On duty (fr): 30/04/2025,Win Bou,012345678
Je pense que je devrais avoir quelque chose comme cela
On duty (fr): 30/03/2022,Cah DaU,012345678
On duty (nl): 29/03/2022,Valm Vax Mlk,012345678
On duty (fr): 29/04/2022,LiS Du Mie,012345678
On duty (nl): 29/04/2022,LiS Du Mie,012345678
On duty (nl): 30/04/2025,LiS Du Mie,012345678
On duty (fr): 30/04/2025,Win Bou,012345678
On duty (fr): 31/03/2025,Suy Sze,012345678
On duty (nl): 11/03/2025,Suy Sze,012345678
On duty (nl): 31/03/2025,Valm Vax Mlk,012345678
Le palliatif trouvé
a@b:~$ sort -t"*" -k1.16 Tri.txt
On duty (nl): 11/03/2025,Suy Sze,012345678
On duty (nl): 29/03/2022,Valm Vax Mlk,012345678
On duty (fr): 29/04/2022,LiS Du Mie,012345678
On duty (nl): 29/04/2022,LiS Du Mie,012345678
On duty (fr): 30/03/2022,Cah DaU,012345678
On duty (nl): 30/04/2025,LiS Du Mie,012345678
On duty (fr): 30/04/2025,Win Bou,012345678
On duty (fr): 31/03/2025,Suy Sze,012345678
On duty (nl): 31/03/2025,Valm Vax Mlk,012345678
a@b:~$ sort -t"*" -k1.17 Tri.txt
On duty (fr): 30/03/2022,Cah DaU,012345678
On duty (nl): 30/04/2025,LiS Du Mie,012345678
On duty (fr): 30/04/2025,Win Bou,012345678
On duty (fr): 31/03/2025,Suy Sze,012345678
On duty (nl): 11/03/2025,Suy Sze,012345678
On duty (nl): 31/03/2025,Valm Vax Mlk,012345678
On duty (nl): 29/03/2022,Valm Vax Mlk,012345678
On duty (fr): 29/04/2022,LiS Du Mie,012345678
On duty (nl): 29/04/2022,LiS Du Mie,012345678
a@b:~$
Dernière modification par geole (Le 09/05/2025, à 17:31)
Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
Je défie QUICONQUE de trouver une discussion où j'aurais suggéré de remplacer un SSD par un disque dur.
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248
En ligne
#11 Le 09/05/2025, à 19:19
- Watael
Re : Commande sort - classement et tri d'un fichier texte.
awk -F '[:,]' '$1~ /\(nl|fr\)$/{split($2,ar,"/"); epoch=mktime(ar[3]" "ar[2]" "ar[1]" 00 00 00"); data[n++]=epoch" "$0}; END{PROCINFO["sorted_in"]="@val_num_asc"; for(i in data)print substr(data[i],12)}' tonFichier
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#12 Le 09/05/2025, à 19:30
- geole
Re : Commande sort - classement et tri d'un fichier texte.
a@b:~$ awk -F '[:,]' '$1~ /\(nl|fr\)$/{split($2,ar,"/"); epoch=mktime(ar[3]" "ar[2]" "ar[1]" 00 00 00"); data[n++]=epoch" "$0}; END{PROCINFO["sorted_in"]="@val_num_asc"; for(i in data)print substr(data[i],12)}' Tri.txt
On duty (fr): 30/03/2022,Cah DaU,012345678
On duty (nl): 11/03/2025,Suy Sze,012345678
On duty (nl): 30/04/2025,LiS Du Mie,012345678
On duty (nl): 31/03/2025,Valm Vax Mlk,012345678
On duty (nl): 29/04/2022,LiS Du Mie,012345678
On duty (nl): 29/03/2022,Valm Vax Mlk,012345678
On duty (fr): 30/04/2025,Win Bou,012345678
On duty (fr): 29/04/2022,LiS Du Mie,012345678
On duty (fr): 31/03/2025,Suy Sze,012345678
a@b:~$ l
Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
Je défie QUICONQUE de trouver une discussion où j'aurais suggéré de remplacer un SSD par un disque dur.
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248
En ligne
#13 Le 09/05/2025, à 23:00
- Watael
Re : Commande sort - classement et tri d'un fichier texte.
$ gawk -F '[:,]' '$1~ /\(nl|fr\)$/{split($2,ar,"/"); epoch=mktime(ar[3]" "ar[2]" "ar[1]" 00 00 00"); data[n++]=epoch" "$0}; END{PROCINFO["sorted_in"]="@val_num_asc"; for(i in data)print substr(data[i],12)}' /tmp/fic
On duty (nl): 29/03/2022,Valm Vax Mlk,012345678
On duty (fr): 30/03/2022,Cah DaU,012345678
On duty (fr): 29/04/2022,LiS Du Mie,012345678
On duty (nl): 29/04/2022,LiS Du Mie,012345678
On duty (nl): 11/03/2025,Suy Sze,012345678
On duty (fr): 31/03/2025,Suy Sze,012345678
On duty (nl): 31/03/2025,Valm Vax Mlk,012345678
On duty (fr): 30/04/2025,Win Bou,012345678
On duty (nl): 30/04/2025,LiS Du Mie,012345678
$
tu as bien utilisé GNUawk ?
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#14 Le 10/05/2025, à 09:49
- geole
Re : Commande sort - classement et tri d'un fichier texte.
Bonjour
gawk -F '[:,]' '$1~ /\(nl|fr\)$/{split($2,ar,"/"); epoch=mktime(ar[3]" "ar[2]" "ar[1]" 00 00 00"); data[n++]=epoch" "$0}; END{PROCINFO["sorted_in"]="@val_num_asc"; for(i in data)print substr(data[i],12)}' Tri.txt
La commande « gawk » n'a pas été trouvée, mais peut être installée avec :
sudo apt install gawk
a@b:~$ sudo apt install gawk
Lecture des listes de paquets... Fait
......
gawk -F '[:,]' '$1~ /\(nl|fr\)$/{split($2,ar,"/"); epoch=mktime(ar[3]" "ar[2]" "ar[1]" 00 00 00"); data[n++]=epoch" "$0}; END{PROCINFO["sorted_in"]="@val_num_asc"; for(i in data)print substr(data[i],12)}' Tri.txt
On duty (nl): 29/03/2022,Valm Vax Mlk,012345678
On duty (fr): 30/03/2022,Cah DaU,012345678
On duty (fr): 29/04/2022,LiS Du Mie,012345678
On duty (nl): 29/04/2022,LiS Du Mie,012345678
On duty (nl): 11/03/2025,Suy Sze,012345678
On duty (fr): 31/03/2025,Suy Sze,012345678
On duty (nl): 31/03/2025,Valm Vax Mlk,012345678
On duty (fr): 30/04/2025,Win Bou,012345678
On duty (nl): 30/04/2025,LiS Du Mie,012345678
Reste à incorporer le tri sur la zone qui suit la virgule et certainement le code pays.
Dernière modification par geole (Le 10/05/2025, à 09:51)
Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
Je défie QUICONQUE de trouver une discussion où j'aurais suggéré de remplacer un SSD par un disque dur.
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248
En ligne
#15 Hier à 19:56
- RaphaelG
Re : Commande sort - classement et tri d'un fichier texte.
Comme d'hab, Watael nous a sorti une commande awk d'une perversion absolue; du porn shell qui devrait être interdit dans un forum familial !
Une petite suggestion aux gurus de la CLI qui hantent ce forum (je pense tout particulièrement à nany et à Watael) :
Les commandes compactées en une seule ligne, c'est bien pour les noobs qui de toute manière ne comprennent rien à rien; ils copient l'énorme ligne et la collent dans leur terminal et hop, problème résolu. Mais pour nous les noobs++ qui essayons de comprendre, ce serait mieux si vous détailliez en plusieurs commandes soigneusement indentées. Par exemple, la commande de Watael donnerait cela :
#!/usr/bin/bash
gawk -F '[:,]' '
$1 ~ /\(nl|fr\)$/ {
split($2,ar,"/")
epoch=mktime(ar[3]" "ar[2]" "ar[1]" 00 00 00")
data[n++]=epoch" " $0
}
END {
PROCINFO["sorted_in"]="@val_num_asc"
for (i in data) print substr(data[i],12)
}
' sodim.log
C'est tout de même plus joli, non ? Bon, c'est un point de détail cosmétique. Revenons au fond.
Pour le peu que j'arrive à comprendre, mawk (installé par défaut dans ubuntu (et Debian)) n'aurait pas le même comportement que gawk et en particulier, dans ce cas qui nous intéresse, ce serait :
PROCINFO["sorted_in"]="@val_num_asc"
qui ne serait pas pris en compte par mawk.
Ai je bien compris ?
Sinon, traiter ce problème avec sort me semble plus aisé à appréhender.
Comme geole en #8 et #10, je ne comprenais pas pourquoi ma commande sort ne faisait pas le travail. L'option --debug de sort m'a beaucoup aidé.
Dans le fichier sodim.log que nous a fourni en partie arnoxz, il y a 2 espaces entre les champs 3 et 4, ce qui fait que champ 4 a son 1er caractère qui est toujours un espace qui doit être comptabilisé pour identifier la position des caractères à l'intérieur du champ.
Mon palliatif pour éviter cela, consiste à utiliser l'option -b de sort.
Dans le man de sort :
-b, --ignore-leading-blanks
ignore leading blanks
Ma proposition :
grep -E "\((fr)|(nl)\):" sodim.log | sort -b -n -k4.7,4.10 -k4.4,4.5 -k4.1,4.2
Contrairement à ce que dit eresse en #6, les chiffres après la virgule ne représentent pas la taille mais la position du dernier caractère pris en compte.
-k4.7,4.10 veut dire qu'on prend comme critère de tri, les caractères du champ 4 compris entre la 7ème et la 10ème position incluses, la numérotation commençant à 1.
Tout comme la solution de Watael, le tri ne se fait que sur la date, le champ 3 (nl ou fr) et les caractères suivants la date ne sont pas pris en compte.
Dernière modification par RaphaelG (Aujourd'hui à 03:19)
Hors ligne
#16 Hier à 21:22
- Watael
Re : Commande sort - classement et tri d'un fichier texte.
tu as bien compris.
par contre, au plus simple, le script serait
#!/usr/bin/gawk -f
BEGIN{
FS="[:,]"
}
$1~ /\(nl|fr\)$/{
split($2,ar,"/")
epoch=mktime(ar[3]" "ar[2]" "ar[1]" 00 00 00")
data[n++]=epoch" "$0
}
END{
PROCINFO["sorted_in"]="@val_num_asc"
for(i in data)print substr(data[i],12)
}
appelé ./monScript.awk /chemin/monFichierAtraiter
et de façon un peu pervers :
#!/usr/bin/gawk -f
BEGIN{
FS="[:,]"
ARGV[1]="/chemin/fichierAtraiter"
ARGC+=1
}
$1~ /\(nl|fr\)$/{
split($2,ar,"/")
epoch=mktime(ar[3]" "ar[2]" "ar[1]" 00 00 00")
data[n++]=epoch" "$0
}
END{
PROCINFO["sorted_in"]="@val_num_asc"
for(i in data)print substr(data[i],12)
}
le script n'a alors plus besoin d'arguments pour être exécuté.
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#17 Aujourd'hui à 10:56
- arnoxz
Re : Commande sort - classement et tri d'un fichier texte.
Merci pour vos propositions (de plus en plus complexe ).
Finalement avec awk et sort cela semble le plus efficace... et cela fonctionne avec les lignes suivantes...
awk -F',' '{
split($1, a, ": ");
split(a[2], d, "/");
print d[3] "-" d[2] "-" d[1] "," $0
}' /tmp/texte.log | sort | cut -d',' -f2-
MErci :-)
Dernière modification par arnoxz (Aujourd'hui à 11:54)
Hors ligne
#18 Aujourd'hui à 11:21
- geole
Re : Commande sort - classement et tri d'un fichier texte.
Bonjour
Dans mon jargon, cela donne ça
Tri sur année, mois, jour, libellé2 ( possibilité d'ajouter le champs 3 )
a@b:~$ sort -b -k4.7,4.10 -k4.4,4.5 -k4.1,4.2 -k4.12,4.14 Tri1.txt
On duty (nl): 29/03/2022,Valm Vax Mlk,012345678
On duty (fr): 30/03/2022,Cah DaU,012345678
On duty (fr): 29/04/2022,LiS Du Mie,012345678
On duty (nl): 29/04/2022,LiS Du Mie,012345678
On duty (nl): 11/03/2025,Suy Sze,012345678
On duty (fr): 31/03/2025,Suy Sze,012345678
On duty (nl): 31/03/2025,Valm Vax Mlk,012345678
On duty (nl): 30/04/2025,LiS Du Mie,012345678
On duty (fr): 30/04/2025,Win Bou,012345678
a@b:~$
a@b:~$ sort -b -k4.7,4.10 -k4.4,4.5 -k4.1,4.2 -k4.12,4.14 -k3 Tri1.txt
On duty (nl): 29/03/2022,Valm Vax Mlk,012345678
On duty (fr): 30/03/2022,Cah DaU,012345678
On duty (fr): 29/04/2022,LiS Du Mie,012345678
On duty (nl): 29/04/2022,LiS Du Mie,012345678
On duty (nl): 11/03/2025,Suy Sze,012345678
On duty (fr): 31/03/2025,Suy Sze,012345678
On duty (nl): 31/03/2025,Valm Vax Mlk,012345678
On duty (nl): 30/04/2025,LiS Du Mie,012345678
On duty (fr): 30/04/2025,Win Bou,012345678
a@b:~$
J'avais remarqué les deux espaces mais mal compris la conséquence.
Dernière modification par geole (Aujourd'hui à 11:26)
Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
Je défie QUICONQUE de trouver une discussion où j'aurais suggéré de remplacer un SSD par un disque dur.
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248
En ligne
#19 Aujourd'hui à 15:11
- Watael
Re : Commande sort - classement et tri d'un fichier texte.
<mauvaise foi>
je ne trouve pas ça beaucoup plus compréhensible que Gawk.
au moins dans awk, il y a des mots.
</mauvaise foi>
Dernière modification par Watael (Aujourd'hui à 15:12)
Connected \o/
Welcome to sHell. · eval is evil.
Hors ligne
#20 Aujourd'hui à 15:55
- erresse
Re : Commande sort - classement et tri d'un fichier texte.
Contrairement à ce que dit eresse en #6, les chiffres après la virgule ne représentent pas la taille mais la position du dernier caractère pris en compte.
-k4.7,4.10 veut dire qu'on prend comme critère de tri, les caractères du champ 4 compris entre la 7ème et la 10ème position incluses, la numérotation commençant à 1.
En fait, des essais que j'aie pu faire avec --debug pour voir ce qui est pris en compte, les chiffres après la virgule ne correspondent à rien, ni taille ni position. Ils sont tout simplement ignorés et le critère est censé aller de la position de départ (espace délimiteur compris) à la fin de l'enregistrement, tous champs confondus.
S'il est possible de définir une taille de clé particulière, que ce soit en taille ou en position finale, je n'ai pas trouvé comment.
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#21 Aujourd'hui à 16:13
- geole
Re : Commande sort - classement et tri d'un fichier texte.
En fait, des essais que j'aie pu faire avec --debug pour voir ce qui est pris en compte, les chiffres après la virgule ne correspondent à rien, ni taille ni position. Ils sont tout simplement ignorés et le critère est censé aller de la position de départ (espace délimiteur compris) à la fin de l'enregistrement, tous champs .
Bonjour
Je pense que tu te trompes Le résultat est différent si on joue avec les longueurs
a@b:~$ sort -b -k4.7,4.10 -k4.4,4.5 -k4.1,4.2 Tri1.txt
On duty (nl): 29/03/2022,Valm Vax Mlk,012345678
On duty (fr): 30/03/2022,Cah DaU,012345678
On duty (fr): 29/04/2022,LiS Du Mie,012345678
On duty (nl): 29/04/2022,LiS Du Mie,012345678
On duty (nl): 11/03/2025,Suy Sze,012345678
On duty (fr): 31/03/2025,Suy Sze,012345678
On duty (nl): 31/03/2025,Valm Vax Mlk,012345678
On duty (fr): 30/04/2025,Win Bou,012345678
On duty (nl): 30/04/2025,LiS Du Mie,012345678
a@b:~$ sort -b -k4.7,4.14 -k4.4,4.5 -k4.1,4.2 Tri1.txt
On duty (fr): 30/03/2022,Cah DaU,012345678
On duty (fr): 29/04/2022,LiS Du Mie,012345678
On duty (nl): 29/04/2022,LiS Du Mie,012345678
On duty (nl): 29/03/2022,Valm Vax Mlk,012345678
On duty (nl): 30/04/2025,LiS Du Mie,012345678
On duty (nl): 11/03/2025,Suy Sze,012345678
On duty (fr): 31/03/2025,Suy Sze,012345678
On duty (nl): 31/03/2025,Valm Vax Mlk,012345678
On duty (fr): 30/04/2025,Win Bou,012345678
a@b:~$ sort --debug -b -k4.7,4.10 -k4.4,4.5 -k4.1,4.2 Tri1.txt
sort: tri du texte réalisé en utilisant les règles de tri «fr_FR.UTF-8»
On duty (nl): 29/03/2022,Valm Vax Mlk,012345678
____
__
__
________________________________________________
On duty (fr): 30/03/2022,Cah DaU,012345678
____
__
__
___________________________________________
On duty (fr): 29/04/2022,LiS Du Mie,012345678
____
__
__
______________________________________________
On duty (nl): 29/04/2022,LiS Du Mie,012345678
____
__
__
______________________________________________
On duty (nl): 11/03/2025,Suy Sze,012345678
____
__
__
_____________________________________________
On duty (fr): 31/03/2025,Suy Sze,012345678
____
__
__
___________________________________________
On duty (nl): 31/03/2025,Valm Vax Mlk,012345678
____
__
__
________________________________________________
On duty (fr): 30/04/2025,Win Bou,012345678
____
__
__
___________________________________________
On duty (nl): 30/04/2025,LiS Du Mie,012345678
____
__
__
______________________________________________
a@b:~$
a@b:~$ sort --debug -b -k4.7,4.14 -k4.4,4.5 -k4.1,4.2 Tri1.txt
sort: tri du texte réalisé en utilisant les règles de tri «fr_FR.UTF-8»
On duty (fr): 30/03/2022,Cah DaU,012345678
________
__
__
___________________________________________
On duty (fr): 29/04/2022,LiS Du Mie,012345678
________
__
__
______________________________________________
On duty (nl): 29/04/2022,LiS Du Mie,012345678
________
__
__
______________________________________________
On duty (nl): 29/03/2022,Valm Vax Mlk,012345678
________
__
__
________________________________________________
On duty (nl): 30/04/2025,LiS Du Mie,012345678
________
__
__
______________________________________________
On duty (nl): 11/03/2025,Suy Sze,012345678
________
__
__
_____________________________________________
On duty (fr): 31/03/2025,Suy Sze,012345678
________
__
__
___________________________________________
On duty (nl): 31/03/2025,Valm Vax Mlk,012345678
________
__
__
________________________________________________
On duty (fr): 30/04/2025,Win Bou,012345678
________
__
__
___________________________________________
a@b:~$
Dernière modification par geole (Aujourd'hui à 16:19)
Les grilles de l'installateur https://doc.ubuntu-fr.org/tutoriel/inst … _subiquity
Je défie QUICONQUE de trouver une discussion où j'aurais suggéré de remplacer un SSD par un disque dur.
Les partitions EXT4 des disques externes => https://forum.ubuntu-fr.org/viewtopic.p … #p22697248
En ligne
#22 Aujourd'hui à 17:36
- erresse
Re : Commande sort - classement et tri d'un fichier texte.
Je pense que tu te trompes
Et tu as raison ! En effet, je me trompe parce-que je n'avais pas bien compris comment exprimer les critères de la clé : Je mettais juste une position (ou ce que je croyais une taille) derrière la virgule, comme cela :
sort -k 1.7,10 fichier
Alors que tes exemples montrent clairement qu'il faut indiquer le rang du champ dans les deux cas :
sort -k 1.7,1.10 fichier
Et là, en effet, j'obtiens bien un tri sur des critères délimités.
De fait, la notation n'est pas très explicite dans le man, ils auraient pu faire un petit effort de clarté...
Donc, merci geole, je saurai mieux m'y prendre pour trier efficacement une prochaine fois.
Plus de 50 ans d'informatique, ça en fait des lignes de commandes en console, mais on n'avait pas le choix...
Excellente raison pour, aujourd'hui qu'on le peut, utiliser au maximum les INTERFACES GRAPHIQUES !
Important : Une fois le problème solutionné, pensez à clore votre sujet en ajoutant [Résolu] devant le titre du 1er message, et un bref récapitulatif de la solution à la fin de celui-ci. Merci.
Hors ligne
#23 Aujourd'hui à 18:51
- RaphaelG
Re : Commande sort - classement et tri d'un fichier texte.
<mauvaise foi>
........
Si on considère que ce qui est le plus couteux pour un processeur c'est le mécanisme fork/exec alors la solution d'arnoxz est la plus gourmande car son shell va faire 3 fork/exec, pour awk, sort et cut.
Watael n'en fait qu'un puisqu'il n'utilise que gawk mais il doit installer le paquet gawk et utiliser des mécanismes exotiques de gawk comme la fonction mktime et la directive PROCINFO["sorted_in"].
Non, vraiment en toute bonne foi, ya pas photo, c'est ma solution (et celle de geole) qui offre le meilleur compromis : 2 fork/exec seulement pour grep et sort et une compacité exemplaire avec moins de 80 caractères.
Hors ligne