script un peu compliqué de réorganisation de lignes

script un peu compliqué de réorganisation de lignes - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 06-06-2007 à 10:17:16    

Bonjour,
 
je pense que c'est possible mais ça dépasse malheureusement mes compétences :( Je souhaite prendre en entrée un fichier composé de lignes contenant chacune un seul mot. Je souhaite les réorganiser de sorte que si un mot 1 est contenu dans un mot 2, alors le mot 2 apparaisse avant le mot 1 pdt la lecture du fichier.
 
Par exemple, si le fichier d'entrée est :

Code :
  1. TOTO
  2. TOTOTITI
  3. TUTU
  4. TO


une sortie correcte pourrait être :

Code :
  1. TOTOTITI
  2. TOTO
  3. TO
  4. TUTU


 
Je pense que l'algo le plus simple consiste juste à trier les mots par taille décroissante. Mais je ne sais pas comment faire ça :(
 
Merci d'avance pour toute piste :)

Reply

Marsh Posté le 06-06-2007 à 10:17:16   

Reply

Marsh Posté le 06-06-2007 à 10:21:39    

sort -r ?
ça te donnera plutôt un truc du genre  
TUTU
TOTOTITI
TOTO
TO
 
mais ça dépend de ce que tu veux faire après

Reply

Marsh Posté le 06-06-2007 à 10:23:13    

C'est pour faire des remplacements dans un fichier. Du coup par exemple si TOTO apparait avant TOTOTITI je vais pas pouvoir remplacer ce dernier. Je regarde ta commande tout de suite :)

 

EDIT : hum ça trie suivant les premières lettres donc ça ne me va pas. Par exemple TITITOTO ne sera pas avant TOTO


Message édité par freewol le 06-06-2007 à 10:24:37
Reply

Marsh Posté le 06-06-2007 à 10:27:48    

je pense qu'avec awk je peux ajouter en début de ligne le nombre de caractères contenus dans la ligne ? auquel cas après je pourrais effectivement faire un sort numérique sur le fichier :)  
je connais très mal awk donc je vais jeter un oeil dans la doc, mais si vous savez comment faire je suis preneur :)

Reply

Marsh Posté le 06-06-2007 à 10:29:14    

il dit qu'il comprend pas ton problème. Donne un exemple de ce que tu veux réellement faire, ça sera plus simple

Reply

Marsh Posté le 06-06-2007 à 10:33:40    

Bah comme je l'ai dit je génère des fichiers pour faire des remplacements après. Voici le script que j'applique ensuite :
 

Code :
  1. #!/usr/bin/zsh
  2. grep '^#define' fichier.h | sed 's/[[:blank:]][[:blank:]]*/ /g' | cut -d' ' -f2 > fichier_constantes
  3. grep '^#define' fichier.h | sed 's/[[:blank:]][[:blank:]]*/ /g' | cut -d' ' -f3 > fichier_constantes_values
  4. nb_cst=`wc -l fichier_constantes | cut -d' ' -f1`
  5. cp fichier.cc fichier_step1
  6. for i in `seq 1 $nb_cst`; do
  7. var1=`head fichier_constantes -n $i | tail -n 1`
  8. var2=`head fichier_constantes_values -n $i | tail -n 1`
  9. echo "replacing $var1 with \t$var2"
  10.  (( j = $i + 1 ))
  11.  sed -e "s/$var1/$var2/g" fichier_step$i > fichier_step$j
  12. done
  13. for i in `seq 1 $nb_cst`; do
  14. rm fichier_step$i
  15. done
  16. mv fichier_step$j fichierbis.cc
  17. cp fichier.h fichierbis.h


 
Je souhaite donc réorganiser fichier_constantes de sorte qu'une constante 1 contenant une constante 2 soit placée avant cette dernière.
 
Est-ce plus clair ?

Reply

Marsh Posté le 06-06-2007 à 11:14:56    

bon j'ai réussi avec awk et son champ length :)
comme je suis pas spécialiste le script est assez moche mais le principal c'est que ça marche :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed