Précédent   Forum des professionnels en informatique > Systèmes > Autres systèmes > Unix
Unix Forum d'entraide sur les systèmes Unix et dérivés (*BSD, AIX, etc.). Avant de poster ->F.A.Q BSD F.A.Q. Aix
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 21/04/2011, 16h35   #1
Invité de passage
 
Inscription : avril 2008
Messages : 12
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 12
Points : 0
Points : 0
Par défaut Aide pour découpage fichier avec awk

Bonjour à tous,

Pour mon travail, je dois découper un gros fichier texte (477 Mo) en plusieurs fichiers plus petits.
Le fichier de départ est au format csv (séparateur ";" donc) et chaque ligne commence avec un numéro à 9 chiffres dont les trois premiers sont le département. Par exemple 001000021 correspond à une ligne sur le département 001.
Je cherche à découper le fichier par département donc pour générer des fichiers unitaires 001.txt, 002.txt etc... contenant toutes les lignes sur les départements.

J'ai utilisé la commande suivante sous Cygwin (je suis sous Windows...):
Code :
awk -f split.awk fichiersource.txt

et mon fichier split.awk contient:
Code :
1
2
3
4
5
/^001/ {print >> "001.txt"}
/^002/ {print >> "002.txt"}
/^003/ {print >> "003.txt"}
/^004/ {print >> "004.txt"}
/^005/ {print >> "005.txt"}
etc...

ça marche "presque" bien: pour certains départements, la découpe s'arrête en plein milieu d'une ligne (toujours la même), et les lignes qui suivent qui font pourtant bien parti du même département ne sont pas extraites...

ça fait deux heures que je cherche en vain, si quelqu'un comprend, je lui serais très reconnaissant de m'aider !

Merci d'avance
jullebarge est déconnecté   Envoyer un message privé Réponse avec citation 01
Vieux 21/04/2011, 18h15   #2
Expert Confirmé Sénior
 
Homme Laurent Willems
Expert Stop/Start
Inscription : septembre 2002
Messages : 2 551
Détails du profil
Informations personnelles :
Nom : Homme Laurent Willems
Âge : 33
Localisation : Belgique

Informations professionnelles :
Activité : Expert Stop/Start

Informations forums :
Inscription : septembre 2002
Messages : 2 551
Points : 4 271
Points : 4 271
Hello,

Pourrais-tu fournir les départements problématiques?
__________________
Alea Jacta Test!
Mygale1978 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 09h56   #3
Invité de passage
 
Inscription : avril 2008
Messages : 12
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 12
Points : 0
Points : 0
Malheureusement non je ne peux pas vraiment, ce sont des données confidentielles.

Je peux fournir la ligne sur laquelle l'export s'arrête sur le département 001: il s'agit de la 2ème ligne du fichier en PJ, et l'import se bloque à 001000000;01005;3;OH;1.22;;A;0;
Le reste de la ligne et du fichier n'est pas traitée
Fichiers attachés
Type de fichier : txt extrait.txt (157 octets, 5 affichages)
jullebarge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 10h25   #4
Membre Expert
 
Avatar de becket
 
Frédéric Brugmans
Informaticien multitâche
Inscription : février 2005
Messages : 661
Détails du profil
Informations personnelles :
Nom : Frédéric Brugmans

Informations professionnelles :
Activité : Informaticien multitâche

Informations forums :
Inscription : février 2005
Messages : 661
Points : 1 196
Points : 1 196
Je sais que ce n'est pas une solution mais je pense qu'il était possible de simplifier le code et éviter tout erreur de répétition dans le code

Code :
1
2
awk -F\; '{  print $0  >> substr($1,0,3)".txt" }' FICHIER.TXT
Ensuite, est ce que tu as fait le test en enlevant ou en déplaçant la ligne qui pose problème ? Quel est le résultat ?
becket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 10h34   #5
Invité de passage
 
Inscription : avril 2008
Messages : 12
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 12
Points : 0
Points : 0
Merci déjà pour cette commande simplifiée

Je vais faire le test en supprimant la ligne qui pose problème
jullebarge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 10h48   #6
Expert Confirmé
 
Inscription : janvier 2011
Messages : 970
Détails du profil
Informations personnelles :
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations forums :
Inscription : janvier 2011
Messages : 970
Points : 2 871
Points : 2 871
Salut,

Regarde si dans ton fichier (au niveau où ça merdoie) s'il n'y aurait pas des caractères exotiques, style non-imprimable

Aides-toi de la commande "cat -A" ou "sed -n l" pour afficher lesdits caractères...
__________________
$ man woman
Il n'y a pas de page de manuel pour woman.
zipe31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 10h51   #7
Invité de passage
 
Inscription : avril 2008
Messages : 12
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 12
Points : 0
Points : 0
J'ai tenté un truc: j'ai créé un fichier en sélectionnant les 95000 premières lignes du fichier d'origine (ça couvre tout le département 01 et le début du 02) et ensuite j'ai relancé la commande d'extraction et là ça passe, j'ai bien toutes les lignes du département 01 sans coupure !

Donc c'est pas la ligne en elle-même qui semble poser problème (d'ailleurs j'ai vérifié, il n'y a aucun caractère particulier) mais la taille fichier ?

Je vois pas comment m'en sortir
jullebarge est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 12h04   #8
Membre Expert
 
Avatar de becket
 
Frédéric Brugmans
Informaticien multitâche
Inscription : février 2005
Messages : 661
Détails du profil
Informations personnelles :
Nom : Frédéric Brugmans

Informations professionnelles :
Activité : Informaticien multitâche

Informations forums :
Inscription : février 2005
Messages : 661
Points : 1 196
Points : 1 196
Etant donné que tu utilise les outils GNU sous windows, c'est peut etre effectivement une limitation de windows. La meilleur façon de le vérifier serait de lancer le traitement sous linux. J'imagine que tu as des bonnes raisons pour le faire ainsi.

Ce que tu peux essayer de faire, c'est de faire une boucle du genre while read fichier ; echo ligne : awk ... etc
becket est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/04/2011, 14h51   #9
Invité de passage
 
Inscription : avril 2008
Messages : 12
Détails du profil
Informations forums :
Inscription : avril 2008
Messages : 12
Points : 0
Points : 0
Bon ça se complique en fait, je n'ai pas travaillé sur le bon fichier, je dois en récupérer un nouveau et retenter, peut-être que je n'aurai plus le problème...
jullebarge est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 12h27.


 
 
 
 
Partenaires

Hébergement Web