Trier et séparer un fichier en plusieurs fichiers

Résolu/Fermé
JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 - 29 sept. 2015 à 17:07
JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 - 30 sept. 2015 à 15:11
Bonjour,

J'ai un fichier en entrée qui est constitué de la façon suivante :

AAAPPPPZZZZAAA
BBBCCCMMMZZZZ
AAABBBLLLZZZYY
CCCEEEMMMNNNI
BBBFFFEEEEAAAA

je souhaiterai obtenir le résultat suivant :

-Un fichier qui s'appelle TRAAA.txt contenant :

AAABBBLLLZZZYY
AAAPPPPZZZZAAA

-Un fichier qui s'appelle TRBBB.txt contenant :

BBBCCCMMMZZZZ
BBBFFFEEEEAAAAA

-Un fichier qui s'appelle TRCCC.txt contenant :

CCCEEEMMMNNNI

Il faut donc que les trois premiers caractères servant de clé de chaque enregistrement se retrouve dans le nom du fichier ou seront envoyés les enregistrements correspondant.
J'imagine qu'il serait mieux de trier le fichier en entrée mais pour la suite je ne sais pas comment faire.

merci d'avance.

A voir également:

4 réponses

dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
30 sept. 2015 à 08:29
hello
$ awk '{print $0 > "TR" substr($0, 1, 3) ".txt"}' fichier
$ ls TR*
TRAAA.txt TRBBB.txt TRCCC.txt
1
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
30 sept. 2015 à 11:04
avec tri
sort fichier | awk '{print $0 > "TR" substr($0, 1, 3) ".txt"}' 
0
Salut, vous avez essayé d'utiliser grep?
http://www.cyberciti.biz/faq/howto-use-grep-command-in-linux-unix/
(il y a d'autres exemples, celui ci est juste le premier que j'ai trouvé).
Si votre fichier est un texte vous pouvez le manipuler comme vous voulez(et en créer autant que nécessaire) avec les commandes bash, et même mettre en mémoire(avec des variables) le contenu avant de l'utiliser pour créer un nouveau fichier.
La notion de pipe(|) peut aussi être utile dès qu'on veut diviser un résultat en plusieurs.
0
jisisv Messages postés 3645 Date d'inscription dimanche 18 mars 2001 Statut Modérateur Dernière intervention 15 janvier 2017 934
Modifié par jisisv le 29/09/2015 à 21:37
Vite fait (il y aurait plus efficace avec awk, mais ceci fonctionne)

sort truc.txt  | while read line; do  echo $line >> TR$(echo $line | cut -b 1-3 ).txt ; done




EDIT: pour éviter l'utilisation d'un nouveau processus 'cut':
sort truc.txt  | while read line; do echo $line >> TR${line:0:3}.txt ; done


Gates gave ^W sold you the windows.
GNU gave us the whole house.(Alexandrin)
0
JsuisNul Messages postés 122 Date d'inscription mercredi 13 février 2013 Statut Membre Dernière intervention 14 février 2024 1
30 sept. 2015 à 15:11
Merci à tous pour vos réponses.

Je vais tester et voir ce qui me conviendra le mieux.

Encore Merci à tous.
0