Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1345 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

  découpage de fichier

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

découpage de fichier

n°1591456
paulice2
Posté le 25-07-2007 à 19:15:19  profilanswer
 

Bonjour,
 
je souhaiterai découper un fichier en plusieur fichiers, je m'explique :  
j'ai un fichier avec plusieurs lignes :  
0xxxxxxxxx
122xxxxxxx
322xxxxxxx
422xxxxxxx
122xxxxxxx
322xxxxxxx
422xxxxxxx
322xxxxxxx
422xxxxxxx
0555xxxxxx
123xxxxxxx
323xxxxxxx
423xxxxxxx
 
et je souhaiterai le découper en 2 fichiers de la façon suivante :  
1er fichier nommé 444:  
0444xxxxxx
122xxxxxxx
322xxxxxxx
422xxxxxxx
122xxxxxxx
322xxxxxxx
422xxxxxxx
322xxxxxxx
422xxxxxxx
2eme fichier nommé 555:
0555xxxxxx
123xxxxxxx
323xxxxxxx
423xxxxxxx
 
pourriez-vous m'aider svp,
merci bcp d'avance.

mood
Publicité
Posté le 25-07-2007 à 19:15:19  profilanswer
 

n°1591480
aigles
Posté le 25-07-2007 à 21:15:30  profilanswer
 

Peux tu expliciter quelle logique suit le découpage.
 
Jean-Pierre.

n°1591686
paulice2
Posté le 26-07-2007 à 10:36:23  profilanswer
 

Désolé, j'ai été un peu vite car je n'avais pas le temps d'expliquer plus en détaille hier.
 
en fait je dois découper mon fichier en fonction du premier caractère de chaque ligne. A chaque fois que je rencontre un 0 je dois créer un nouveau fichier (il sera nommé avec le 2ème,3eme et 4eme caractère de cette même ligne), insèrer cette même ligne dans le fichier créé et ensuite insèrer les lignes qui suivent jusqu'à rencontrer de nouveau 0 en début de ligne, et là, création d'un nouveau fichier, etc...
Merci à tous pour votre aide.

n°1591694
aigles
Posté le 26-07-2007 à 10:51:11  profilanswer
 

Une possible solution avec awk :

awk '
   /^0/ {
      if (file != "" ) close(file);
      file = substr($0, 2, 3);
      next;
   }
   file {
      print $0 > file;
   }
' inputfile


 
Jean-Pierre.

n°1592022
paulice2
Posté le 26-07-2007 à 19:50:07  profilanswer
 

Merci Jean-Pierre,
 
c'est presque bon, il me manque la ligne avec le 0 en début de ligne
 
peux-tu me dire pourquoi?
merci.
 

n°1592098
aigles
Posté le 26-07-2007 à 23:26:38  profilanswer
 

Il suffit de supprimer l'instruction next :

awk '  
   /^0/ {  
      if (file != "" ) close(file);  
      file = substr($0, 2, 3);  
    }  
   file {  
      print $0 > file;  
   }  
' inputfile


 
Jean-Pierre.

n°1592219
paulice2
Posté le 27-07-2007 à 10:11:20  profilanswer
 

Oui, je m'en suis apercu après avoir posté, merci bcp.
j'ai un dernier souci :  
j'ai inclus le awk dans un script qui utilise des variables.
dans ce script j'ai une variable "nomFic" que je souhaiterai concaténer pour la définition de la variable "file" du awk.
faire du genre : file = substr($0, 2, 3)||$nomFic;
mais ça ne marche pas, vous avez une idée, je vais continuer à chercher de mon coté.
 
Encore merci Jean-Pierre.
 

n°1592264
aigles
Posté le 27-07-2007 à 10:35:05  profilanswer
 

Le plus propre est de définir une variable au niveau awk :

awk -v FileSuffix="$nomfic"  '  
   /^0/ {  
      if (file != "" ) close(file);  
      file = substr($0, 2, 3) FileSuffix;  
    }  
   file {  
      print $0 > file;  
   }  
' inputfile


 
Jean-Pierre.

n°1593422
paulice2
Posté le 30-07-2007 à 16:25:21  profilanswer
 

Merci bcp Jean-Pierre, ça fonctionne très bien, j'espère un jour pouvoir te faire concurence sur UNIX... c'est pas demain la veille.
 
Encore merci pour ton aide et ta disponibilité.

n°1593478
paulice2
Posté le 30-07-2007 à 18:16:26  profilanswer
 

oups j'ai encore une question,
En effet, cette manipulation fonctionne très bien lorsque l'on reste dans le même répertoire, mais si le repertoire cible des fichiers générés est différent du repertoire du fichier source, comme dois-je faire stp?
 
merci pour ta réponse.
 

mood
Publicité
Posté le 30-07-2007 à 18:16:26  profilanswer
 

n°1593484
aigles
Posté le 30-07-2007 à 19:05:08  profilanswer
 

Deux possibilités :
 

cd /path/to/result/dir/
awk -v FileSuffix="$nomfic"  '    
   BEGIN { if (FileDir !~ /\/$/) FileDir = FileDir "/" }
   /^0/ {    
      if (file != "" ) close(file);    
      file = substr($0, 2, 3) FileSuffix;    
    }    
   file {    
      print $0 > file;    
   }    
' /path/to/inputfile


Ou:

awk -v FileSuffix="$nomfic"  -v FileDir='/path/to/result/dir/ '    
   BEGIN { if (FileDir !~ /\/$/) FileDir = FileDir "/" }
   /^0/ {    
      if (file != "" ) close(file);    
      file = FileDir substr($0, 2, 3) FileSuffix;    
    }    
   file {    
      print $0 > file;    
   }    
' inputfile


 
Jean-Pierre.


Message édité par aigles le 31-07-2007 à 08:43:25
n°1596093
paulice2
Posté le 06-08-2007 à 10:47:40  profilanswer
 

Merci bcp, ça marche très bien.
Désolé de la réponse tardive, mais les vacances passent avant tout.
merci encore.
à bientôt.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

  découpage de fichier

 

Sujets relatifs
Supprimer un fichier "sécurisé"Transformer un fichier swf en png/jpg
[RESOLU]Fichier pour executer requete et envoyer par emailLecture d'un fichier formaté
provoquer l'ouverture d'un fichier ac un .exe[Batch] remplacer des strings dans des noms de fichier
{RESOLU}[BATCH]Renomer fichier .jpg + MultiUploadDécoupage de fichier word
Shell AIX 4.3 (pas de support Tableau), decoupage de nom de fichier ?[VB] Programmer un découpage de fichier ?
Plus de sujets relatifs à : découpage de fichier


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR