concaténation de lignes de fichiers

concaténation de lignes de fichiers - Codes et scripts - Linux et OS Alternatifs

Marsh Posté le 25-03-2013 à 12:54:00    

bonjour  
 
j'ai deux fichiers qui contiennent plusieurs lignes je voudrais les concaténer ligne par ligne. par exemple
 
fichier 1
0000
0000
0000
 
fichier 2
1111
1111
1111
 alors mon fichier final aura la forme suivante  
 
0000:1111
0000:1111
0000:1111
 
j'ai essayé avec cat mais ca ecrit a la fin du fichier  
 
comment je peux faire ca?

Reply

Marsh Posté le 25-03-2013 à 12:54:00   

Reply

Marsh Posté le 25-03-2013 à 14:22:53    

Bonjour,
 
Effectivement, la plupart des logiciels vont copier un fichier après l'autre.
 
Je te propose deux méthodes, il a probablement mieux :
1/ Avec Excel
Ouvrir le 1er fichier, tout sélectionner et copier dans le 1ère colonne d'une feuille Excel
Ouvrir le 2ème fichier, tout sélectionner et copier dans le 2ème colonne d'une feuille Excel
Et en 3ème colonne écrire la formule =CONCATENER(A1;":";B1)
Copier et collage spécial valeur de la 3ème colonne
Suppression de la 1ere et 2ème colonnes.
Enregistrement du fichier en csv, txt...
 
2/ Toujours avec Excel
Ecrire une petite macro vba qui lira les deux fichiers et créera ton fichier cible.
 
Cordialement

Reply

Marsh Posté le 25-03-2013 à 14:23:48    

Un script, avec deux boucles... Je vois pas bien comment faire autrement.
Le plus simple à mon avis c'est de faire un script python, si tu ne connais aucun langage de script.


---------------
Un blog qu'il est bien
Reply

Marsh Posté le 25-03-2013 à 15:11:54    

merci bcp

Reply

Marsh Posté le 25-03-2013 à 22:52:32    

J'essaierais quelque chose en bash

Reply

Marsh Posté le 25-03-2013 à 22:58:49    

sinon, j'ai eu une idée, j'ai fait apropos merge
là-dedans il y a  : paste (1)            - merge lines of files
donc tu as déjà.. un programme conçu uniquement pour faire ce boulot! :)  
je te laisse trouver l'option pour avoir ":" comme séparateur.
 
 
(peut-être que je ne l'aurais pas trouvé, si j'avais installé l'OS en français et que les descriptions de apropos étaient en français. ou alors "apropos fusionner" aurait marché)
 

Reply

Marsh Posté le 26-03-2013 à 09:23:51    

En bash avec 2 sed qui récupèrent chaque ligne de chaque fichier, les concatènent avec le séparateur de ton choix et mettent le résultat dans un 3ème fichier ? [:spamatounet]  
Grossièrement :

#!/bin/bash
i=0
while read
do
alpha=sed -n "${i}p" fichier1  
beta=sed -n "${i}p" fichier2  
echo "${alpha}:${beta}\n" > fichier3
((i++))
done < fichier1


Enfin c'est crados comme code, et probablement à débug [:suri_2002]


---------------
Grippe ? Coronavirus ? Portez votre masque correctement ! :D
Reply

Marsh Posté le 26-03-2013 à 14:12:25    

joli
avec deux processus sed lancés à chaque itération,, l'efficacité doit être bien pourrave mais je suppose que le traitement reste quand même quasi instantané du point de vue de l'utilisateur humain.
 
après, que doit-il se passer si les fichiers ne sont pas de la même longueur.. si fichier2 est plus long que fichier1, en particulier.
 
de toute façon il y a  

paste -d : fichier1 fichier2

Reply

Marsh Posté le 26-03-2013 à 20:50:33    

blazkowicz a écrit :

joli
avec deux processus sed lancés à chaque itération,, l'efficacité doit être bien pourrave mais je suppose que le traitement reste quand même quasi instantané du point de vue de l'utilisateur humain.


J'avais prévenu [:cosmoschtroumpf]  

blazkowicz a écrit :

après, que doit-il se passer si les fichiers ne sont pas de la même longueur.. si fichier2 est plus long que fichier1, en particulier.


Dans ce sens là il n'y aura pas de soucis vu qu'en entrée pour le comptage des lignes je fais... une lecture ligne à ligne du fichier1.
Par contre dans l'autre cas (fichier1 plus grand que fichier2) le résultat sera intéressant à voir [:tinostar]  

blazkowicz a écrit :

de toute façon il y a  

paste -d : fichier1 fichier2



Euh... effectivement [:clooney11]


---------------
Grippe ? Coronavirus ? Portez votre masque correctement ! :D
Reply

Sujets relatifs:

Leave a Replay

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