Découper du texte dans un fichier

Découper du texte dans un fichier - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 10-04-2011 à 20:10:55    

Bonjour,  
 
J'ai un fichier txt (exemple ci dessous) contenant plusieurs parties (NOMx) avec un certain nombre de ligne à la suite (pas tjrs le même nombre de ligne).  
J'aimerai regrouper les parties de même nom et envoyer le résultat dans un fichier (autant de fichier que de NOMx différent.).  
Je ne sais pas trop vers quelle commande m'orienter (sed, une boucle while dans un bash...)  
J'espère avoir été clair dans mon explication. merci pour vos éventuelles pistes.  
 
>NOM1  
regergergergreg  
regreregrggrreg  
ergregregregrg  
 
>NOM2  
ezfefezfefezfef  
zefzefezfzefezf  
zefezfzefezffez  
 
>NOM1  
zfefzefezfezf  
ezfezfezfezf  
 
>NOM3  
fzefzefzefzefzef  
zefzefzeffzefzef  
 
>NOM2  
fzefezfezfezfzef  
 
 
 
 
 
Xavier

Reply

Marsh Posté le 10-04-2011 à 20:10:55   

Reply

Marsh Posté le 10-04-2011 à 22:38:26    

si tu pouvais donner plus de details ?
sinon du sed dans un for.

Reply

Marsh Posté le 10-04-2011 à 23:16:48    

pourquoi faire du bash qui n'est pas vraiment adapté au lieu d'un vrai langage de script ? Perl ou Ruby c'est 10 lignes de script pour ça.


---------------
uptime is for lousy system administrators what Viagra is for impotent people - mes unixeries - github me
Reply

Marsh Posté le 11-04-2011 à 11:12:50    

Quel genre de details il te faut ?
un sed dans un for, mais qu'est ce qui permet à sed de ne se limiter qu'à la partie ?

Reply

Marsh Posté le 11-04-2011 à 17:25:28    

Regarde la partie "bloc" sur ce lien http://www.commentcamarche.net/faq [...] stitution.
Voici un exemple de script qui fonctionne :

Code :
  1. cat temp
  2. >NOM1 
  3. regergergergreg 
  4. regreregrggrreg 
  5. ergregregregrg 
  6. >NOM2 
  7. ezfefezfefezfef 
  8. zefzefezfzefezf 
  9. zefezfzefezffez 
  10. >NOM1 
  11. zfefzefezfezf 
  12. ezfezfezfezf 
  13. >NOM3 
  14. fzefzefzefzefzef 
  15. zefzefzeffzefzef 
  16. >NOM2 
  17. fzefezfezfezfzef
 
Code :
  1. #!/bin/bash
  2. # -*- coding: UTF8 -*-
  3. for i in {1..10}
  4. do
  5.     sed -n "/>NOM$i/,/^ *$/ p" temp|sed "/>NOM$i/d;/^ *$/d" > "nom$i.txt"
  6. done
  7. find . -name "nom*.txt" -size 0 -delete


Message édité par roondar le 11-04-2011 à 18:25:36
Reply

Marsh Posté le 12-04-2011 à 11:45:09    

Merci pour le script, je comprend mieux maintenant comment je dois faire.
 
Bonne journée,
 
Xavier.

Reply

Sujets relatifs:

Leave a Replay

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