CONNEXION
  • RetourJeux
    • Tests
    • Soluces
    • Previews
    • Sorties
    • Hit Parade
    • Les + attendus
    • Tous les Jeux
  • RetourActu
    • Culture Geek
    • Astuces
    • Réalité Virtuelle
    • Rétrogaming
    • Toutes les actus
  • RetourHigh-Tech
    • Actus JVTECH
    • Bons plans
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTECH
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch
    • Xbox Series
    • Overwatch 2
    • FUT 23
    • League of Legends
    • Genshin Impact
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • PS4
  • One
  • Switch
  • Wii U
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Etoile Abonnement RSS

Sujet : Faire un tri dans un fichier texte?

DébutPage précedente
1
Page suivantePage suivante
DarthSyphilis DarthSyphilis
MP
Niveau 6
26 février 2019 à 13:01:15

Bonjour, sauriez-vous comment effectuer un tri croissant et/ou décroissant d'une liste de mots dans un fichier texte ?

J'ai fait quelques recherches, mais j'ai rien réussi à faire en ce sens avec sort , à part supprimer les doublons.
Je me suis rabattu sur la solution de facilité: Textpad par Wine. Mais j'aimerai bien pouvoir le faire avec un éditeur de texte libre graphique ou via ligne de commande.

Message édité le 26 février 2019 à 13:01:57 par DarthSyphilis
Athuro83 Athuro83
MP
Niveau 10
26 février 2019 à 14:17:42

Peux-tu fournir un exemple pratique ?
Comme un fichier d'entrée et ce même fichier trié comme tu l'entends, que l'on puisse avoir une idée des données manipulées par exemple.

Il me semblais que sort pouvait trier des mots, mais je n'ai pas vraiment tester. Sinon ça doit être possible de bricoler un petit script shell qui répond à ton besoin !

DarthSyphilis DarthSyphilis
MP
Niveau 6
26 février 2019 à 15:07:05

Y a des caractères spéciaux, des lettres minuscules comme majuscules et des chiffres, donc je suppose que ça rend le processus un peu plus difficile.
Je suis au travail je n'ai pas le document à dispo, mais dans l'idée ça donne ça:

Document brut:

1ffezfUfev@!!!!!7
KjfeiK544!@_fff
Lokzi78
OIK!aze
!Gf@
mf!
JK
lOkP78Gg#EE
AE89fv
@ZE1

Document trié:

JK
mf!
!Gf@
@ZE1
AE89fv
Lokzi78
OIK!aze
lOkP78Gg#EE
KjfeiK544!@_fff
1ffezfUfev@!!!!!7

Donc un tri basé uniquement sur le nombre de caractères.

Message édité le 26 février 2019 à 15:07:50 par DarthSyphilis
godrik godrik
MP
Niveau 22
26 février 2019 à 15:20:37

si deux mots ont la meme taille.comment les tries tu? quel est la taille des fichiers que tu veux trier?

Athuro83 Athuro83
MP
Niveau 10
26 février 2019 à 15:27:36

Ok, en effet ici sort ne peut pas être utilisé directement car il essaye de trier selon la "valeur" des mots et je n'ai pas trouvé d'option pour qu'il prenne en compte la longueur.

Néanmoins j'ai trouvé des solutions qui permettent d'utiliser sort pour ce problème, en rajoutant devant chaque mot son nombre de caractères. Il suffit alors de trier avec sort qui va ici marcher puis d'enlever le nombre de caractère une fois que l'on en a plus besoin.

C'est ce qui est proposé par exemple ici : https://stackoverflow.com/questions/8296649/sorting-lines-from-longest-to-shortest?lq=1
Et ça se fait en une ligne :
awk '{ print length($0) " " $0; }' <tonFichier> | sort -r -n | cut -d ' ' -f 2-
Tu peux même rajouter l'option de sort permettant d'éliminer les doublons.

Reste à voir les performances sur de gros fichiers, selon le volume de données à traiter ce n'est pas forcément la méthode la plus optimale. Mais sur de petits fichiers cela marche plutôt bien !

DarthSyphilis DarthSyphilis
MP
Niveau 6
26 février 2019 à 15:30:48

Le 26 février 2019 à 15:20:37 godrik a écrit :
si deux mots ont la meme taille.comment les tries tu? quel est la taille des fichiers que tu veux trier?

Mon but est de pouvoir supprimer toutes les lignes ayant moins de 4 caractères.
Une taille d'environ 5 Mo,voir une dizaine de Mo grand maximum.

@Athuro83
Merci pour l'astuce, j'essaierai ce soir après le travail, je vous tiendrais au courant :ok:

Message édité le 26 février 2019 à 15:31:47 par DarthSyphilis
deepblue deepblue
MP
Niveau 13
26 février 2019 à 15:31:12
[15:29] /tmp % cat foo                                                                                                       
1ffezfUfev@!!!!!7
KjfeiK544!@_fff
Lokzi78
OIK!aze
!Gf@
mf!
JK
lOkP78Gg#EE
AE89fv
@ZE1
[15:29] /tmp % awk '{l=length($1); if (l < 10) { print "0" l " " $1 } else { print l " " $1 }}' foo | sort | awk '{print $2}' 
JK
mf!
!Gf@
@ZE1
AE89fv
Lokzi78
OIK!aze
lOkP78Gg#EE
KjfeiK544!@_fff
1ffezfUfev@!!!!!7

C'est bourrin mais ça marche.

[Edit] ah, ça a posté entre temps…

Message édité le 26 février 2019 à 15:35:19 par deepblue
godrik godrik
MP
Niveau 22
26 février 2019 à 16:36:46

Si tu fais ca tres souvent, une meilleur solution est bucket sort. Mais probablement il faudrait ecrire ca; et ca ne vaut pas le coup, si ton tri est rare.

_ZawaZawaZawa_ _ZawaZawaZawa_
MP
Niveau 9
26 février 2019 à 17:22:16

Il y a un plugin gedit pour trier il me semble. Si tu ne le trouves pas c'est que j'ai confondu et c'est un plugin pluma.

[DarthSyphilis] [DarthSyphilis]
MP
Niveau 5
01 mars 2019 à 09:56:22

(pseudo banni d'où le retard de ma réponse)

Tri effectué avec la solution proposée par Athuro83, c'est parfait :)

:merci:

Raskolnik Raskolnik
MP
Niveau 10
04 mars 2019 à 09:49:20

Le 26 février 2019 à 17:22:16 _ZawaZawaZawa_ a écrit :
Il y a un plugin gedit pour trier il me semble. Si tu ne le trouves pas c'est que j'ai confondu et c'est un plugin pluma.

Effectivement il existe, à voir si ça marche (rien ne vaut gedit, sérieusement) :
https://help.gnome.org/users/gedit/stable/gedit-plugins-sort.html.en

Et je plussoie la référence à Cross of Iron :noel:

Message édité le 04 mars 2019 à 09:49:43 par Raskolnik
deepblue deepblue
MP
Niveau 13
04 mars 2019 à 12:28:36

Le 04 mars 2019 à 09:49:20 Raskolnik a écrit :

Le 26 février 2019 à 17:22:16 _ZawaZawaZawa_ a écrit :
Il y a un plugin gedit pour trier il me semble. Si tu ne le trouves pas c'est que j'ai confondu et c'est un plugin pluma.

Effectivement il existe, à voir si ça marche (rien ne vaut gedit, sérieusement) :
https://help.gnome.org/users/gedit/stable/gedit-plugins-sort.html.en

Et je plussoie la référence à Cross of Iron :noel:

Mouai :o)) Vim FTW!

[12:26] ~ % cat > /tmp/foo
1ffezfUfev@!!!!!7         
KjfeiK544!@_fff
Lokzi78
OIK!aze
!Gf@
mf!
JK
lOkP78Gg#EE
AE89fv
@ZE1
^C
[12:26] ~ % vim /tmp/foo +'%s/^\(.*\)$/\=strdisplaywidth( submatch(0) ) . " " . submatch(0)/' +'%sort n' +'%s/^\d\+\s//' +'wq'
[12:27] ~ % cat /tmp/foo  
JK
mf!
!Gf@
@ZE1
AE89fv
Lokzi78
OIK!aze
lOkP78Gg#EE
KjfeiK544!@_fff
1ffezfUfev@!!!!!7        

(source https://stackoverflow.com/questions/11531073/how-do-you-sort-a-range-of-lines-by-length )

_DarthSyphilis_ _DarthSyphilis_
MP
Niveau 5
20 juillet 2019 à 08:57:55

Le 26 février 2019 à 15:30:48 DarthSyphilis a écrit :

Le 26 février 2019 à 15:20:37 godrik a écrit :
si deux mots ont la meme taille.comment les tries tu? quel est la taille des fichiers que tu veux trier?

Mon but est de pouvoir supprimer toutes les lignes ayant moins de 4 caractères.

sed -r '/^.{,3}$/d' filename

:cool:

Sepalcure Sepalcure
MP
Niveau 7
20 juillet 2019 à 17:51:40
# trier et supprimer les lignes de moins de 4 caractères
while read -r x; do
    a[${#x}]=$x
done < fichier

for i in "${!a[@]}"; do
    ((i < 4)) || echo "${a[i]}"
done

# juste supprimer les lignes de moins de 4 caractères
while read -r x; do
    ((${#x} < 4)) || echo "$x"
done < fichier

pas besoin de sortir l'artillerie lourde si bash peut le faire :hap:

Message édité le 20 juillet 2019 à 17:53:41 par Sepalcure
DébutPage précedente
1
Page suivantePage suivante
Répondre
Prévisu
?
Victime de harcèlement en ligne : comment réagir ?
La vidéo du moment