Bonjour,
Je recherche une solution pour classer un mot comme "bonjour" par ordre alphabétique pour avoir "bjnooru". Il y a bien la commande sort, mais elle ne s'applique qu'aux lignes, mais pas aux mots contenus dans cette ligne.
Merci.
Bonjour,
Je recherche une solution pour classer un mot comme "bonjour" par ordre alphabétique pour avoir "bjnooru". Il y a bien la commande sort, mais elle ne s'applique qu'aux lignes, mais pas aux mots contenus dans cette ligne.
Merci.
salut,
il n'y a pas de commande toute faite, il va falloir écrire une petite fonction, un petit algorithme
une façon de procéder peut être, pour chaque mot, de découper le mot en lettres, 1 lettre par ligne, puis de trier avec sort et enfin ré-assembler les lignes pour reformer un mot
ça c'est pour le tri des mots, restera à gérer une phrase complète composée de mots
Bonjour
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $ sed 's/./&\n/g'<<<"bonjour"|sort|sed ':z;N;$!b z;s/\n//g' bjnooru
: indicateur d'étiquette pour faire des branchements (inconditionnels ou conditionnels)
:z étiquette z
N Nouvelle ligne ajoutée au buffer avec un \n pour signifier le retour à la ligne.
b Saut inconditionnel
b z saut inconditionnel à l'étiquette z
1b z à la ligne 1, saut inconditionnel à l'étiquette z
$b z à la dernière ligne, saut inconditionnel à l'étiquette z
$!b z si c'est pas la dernière ligne, saut inconditionnel à l'étiquette z (Tout le fichier est dans le buffer)
s/\n//g suppression totale des \n du fichier.
Sinon, voici un exemple de saut conditionnel et son contraire (pour un cryptage facile et pas cher; le premier cryptogramme commence toujours par a, le second jamais):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 $ sed ':bozo;y/abcdefghijklmnopqrstuvwxyz / abcdefghijklmnopqrstuvwxyz/;s/^a/&/;T bozo'<<<"bonjour tout le monde" anmintqzsntszkdzlnmcd $ sed ':bozo;y/abcdefghijklmnopqrstuvwxyz / abcdefghijklmnopqrstuvwxyz/;s/^a/&/;t bozo'<<<"bonjour tout le monde" mlhmspyrmsryjcykmlbc
Bonjour,
D'autres solutions comme:
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo "bonjour" | fold -w 1 | sort | tr -d "\n"
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo "bonjour" | fold -w 1 | columns -s | tr -d " "
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo "bonjour" | grep -o '.' | columns -s | tr -d " "Et ma préférée:
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo "bonjour" | sed 's/./&\n/g' | columns -s | sed 's/ //g'
Code : Sélectionner tout - Visualiser dans une fenêtre à part echo "bonjour" | sed 's/./&\n/g' | columns -s | column -t -s " " -o ""
Une version pure sed et une version combo grep|awk:
trialphabetique.sed :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28 #!/bin/sed -f :a; s/\([bcdefghijklmnopqrstuvwxyz ]\+\)a/a\1/g; t a :b; s/\([cdefghijklmnopqrstuvwxyz ]\+\)b/b\1/g; t b :c; s/\([defghijklmnopqrstuvwxyz ]\+\)c/c\1/g; t c :d; s/\([efghijklmnopqrstuvwxyz ]\+\)d/d\1/g; t d :e; s/\([fghijklmnopqrstuvwxyz ]\+\)e/e\1/g; t e :f; s/\([ghijklmnopqrstuvwxyz ]\+\)f/f\1/g; t f :g; s/\([hijklmnopqrstuvwxyz ]\+\)g/g\1/g; t g :h; s/\([ijklmnopqrstuvwxyz ]\+\)h/h\1/g; t h :i; s/\([jklmnopqrstuvwxyz ]\+\)i/i\1/g; t i :j; s/\([klmnopqrstuvwxyz ]\+\)j/j\1/g; t j :k; s/\([lmnopqrstuvwxyz ]\+\)k/k\1/g; t k :l; s/\([mnopqrstuvwxyz ]\+\)l/l\1/g; t l :m; s/\([nopqrstuvwxyz ]\+\)m/m\1/g; t m :n; s/\([opqrstuvwxyz ]\+\)n/n\1/g; t n :o; s/\([pqrstuvwxyz ]\+\)o/o\1/g; t o :p; s/\([qrstuvwxyz ]\+\)p/p\1/g; t p :q; s/\([rstuvwxyz ]\+\)q/q\1/g; t q :r; s/\([stuvwxyz ]\+\)r/r\1/g; t r :s; s/\([tuvwxyz ]\+\)s/s\1/g; t s :t; s/\([uvwxyz ]\+\)t/t\1/g; t t :u; s/\([vwxyz ]\+\)u/u\1/g; t u :v; s/\([wxyz ]\+\)v/v\1/g; t v :w; s/\([xyz ]\+\)w/w\1/g; t w :x; s/\([yz ]\+\)x/x\1/g; t x :y; s/\([z ]\+\)y/y\1/g; t y :z; s/\( \+\)z/z\1/g; t z
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $ ./trialphabetique.sed <<< "bonjour tout le monde" bdeejlmnnoooorttuu
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 $ echo "bonjour tout le monde"|grep -o '.'|awk '{tab[$1]++;} END{n=asorti(tab,tritab);for (i=1;i<=n;i++) for (j=1;j<=tab[tritab[i]];j++) printf tritab[i]; print "";}' bdeejlmnnoooorttuu
Bonjour;
Merci pour vos réponses, ça fait penser que je dois sérieusement mes sortirs les doigts du ... et me coller les fesse devant l’écran pour me remettre au regex. Les commandes fonctionnent. Le seul inconvénient c'est moi pensait un quelque chose de plus standard qui pourrait aussi fonctionner sur un fichier avec plusieurs lignes sur des jeux de caractères différents accentués ou pas et/ou spéciaux. Ou sinon si vous avez un algorithme pour faire des utilisateurs intelligent sur le PC c'est mieux.
Partager