[résolu][SHELL] Aide pour un script de découpage de fichier

Aide pour un script de découpage de fichier [résolu][SHELL] - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 21-03-2004 à 15:44:51    

salut,
 
Voilà je me retrouve avec un fichier texte d'environ 3Go soit plusieurs millions de lignes, et j'aimerais découper ce fichier et répartir son contenu dans plusieurs fichiers en fonction de la valeur d'un champ, qui se retrouve sur chaque ligne :  
 
exple : j'ai les lignes

Code :
  1. a bb ccc dddd
  2. e ff ccc eeee
  3. h tt fff iiii
  4. k jj fff oooo


et mon critère de tri se trouve sur le 3ème champ.
j'aimerais que les 2 premières lignes se retrouvent dans un fichier , et les 2 suivantes dans un autre (par exple dans les fichiers file_ccc et file_fff)
 
Voilà, j'espère avoir été clair avec mon pb :)  
Je ne demande pas un script qui marche et tout, mais simplement les commandes que je pourrais utiliser pour ça, en gros :)
 
Merci bcp d'avance :jap:


Message édité par pilou51 le 22-03-2004 à 10:17:57
Reply

Marsh Posté le 21-03-2004 à 15:44:51   

Reply

Marsh Posté le 21-03-2004 à 15:58:26    

regarde du côté de awk ou sed
http://www.shellunix.com/


---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

Marsh Posté le 21-03-2004 à 16:41:35    

ok merci je v voir ça :)
 
en fait, il suffirait de parcourir mon fichier, et lorsque je trouve tel ou tel code, écrire la ligne dans un autre...
mais comment lui dire d'écrire toute la ligne correspondante ?

Reply

Marsh Posté le 21-03-2004 à 16:44:30    

peut-être tout bonnement avec grep :
grep ccc mon_fichier > nouveau_fichier_1

 
EDIT : a priori ça marche


Message édité par Mjules le 21-03-2004 à 16:46:27

---------------
Celui qui pose une question est idiot 5 minutes. Celui qui n'en pose pas le reste toute sa vie. |  Membre du grand complot pharmaceutico-médico-scientifico-judéo-maçonnique.
Reply

Marsh Posté le 21-03-2004 à 17:12:37    

Essaye ça :

awk '
$3 != prec {
   if (fichier != "" ) close(fichier);
   fichier = "fic_" $3;
}
{
   print $0 >> fichier;
}
' input_file


---------------
Jean Pierre.
Reply

Marsh Posté le 21-03-2004 à 17:46:28    

ok merci bcp all, ça a l'air de marcher, je ferai des tests plus complets demain avec le vrai fichier...
 
merci infiniment  :jap:  :jap:  :hello:

Reply

Marsh Posté le 22-03-2004 à 09:08:32    

euh j'aurais une petite question subsidiaire :)
 
En fait mon code distinctif est numérique, et peut se retrouver ailleurs dans les lignes du fichier (j'ai plusieurs champs numériques).
Donc la solution que j'ai trouvée est de chercher mon code précédé d'une tabulation (la probabilité que le code se retrouve en début d'un autre champ est quasi nulle).
 
j'ai essayé avec grep \t100 par exple, mais il n'a pas l'air de prendre le \t comme une tabulation. j'ai essayé d'utiliser l'argument -e comme je l'ai vu dans une doc mais il m'envoie jeter en me disant argument inconnu (je suis sur une station Unix sous ksh).
 
Donc si vous aviez une solution, ça serait très cool :)
 
merci d'avance :jap:

Reply

Marsh Posté le 22-03-2004 à 09:36:10    

Où se trouve le champ servant de critère pour découper ton fichier ?  
Je ne vois pas comment il est possible de procéder s'il est n'est pas en position fixe (en terme de champ).
 
Tu dis que la solution est de rechercher le code précédé d'une tabulation, mais où récupères tu la toute première valeur du code ?
 
Quelle est la structure du fichier ?


---------------
Jean Pierre.
Reply

Marsh Posté le 22-03-2004 à 10:17:30    

Bon en fait j'ai trouvé une solution intermédiaire qui semble suffir, à savoir chercher la chaîne ' aaa' avec un espace devant...
 
Le problème est justement que le code n'est pas à place fixe, et que le séparateur est une tabulation...
mais bon, ma solution semble marcher, donc je mets mon prob comme résolu :)
 
merci en tt cas :jap:

Reply

Sujets relatifs:

Leave a Replay

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