#1 Le 17/05/2008, à 23:36
- Le Roi Newbie
[Résolu] Copier les lignes x de 2 fichiers texte
Bonjour,
Voila mon souci (résumé) :
J'ai deux fichiers texte de n lignes.
Et je veux enregistrer dans un 3ème fichier (nouveau) :
Pour i de 1 à n :
echo"$i /n La ligne du fichier 1 /n La ligne du fichier 2 /n
J'ai trouvé et modifié ça :
i=1
while read line
do
echo -e "$i /n $line" >> nouveau_fichier.txt
done < fichier.txt
Mais ça ne gère qu'un fichier et pas les deux !
Pourriez-vous m'aider en me donnant un coup de pouce ? Merci d'avance !
Dernière modification par Le Roi Newbie (Le 18/05/2008, à 00:35)
Hors ligne
#2 Le 17/05/2008, à 23:44
- sdgsqdg
Re : [Résolu] Copier les lignes x de 2 fichiers texte
bonsoir
Un truc du genre n'est pas bon? (concaténer plusieurs fichiers en un seul)
cat {fichier1,fichier2,fichier3} > fichier_de_sortie.txt
Attention, c'est brut comme sortie, tu as toutes les lignes des fichiers, les une derrière les autres.
#3 Le 17/05/2008, à 23:45
- Link31
Re : [Résolu] Copier les lignes x de 2 fichiers texte
#!/bin/bash
FILE1="$1"
FILE2="$2"
N=$(wc -l "$FILE1" | cut -d" " -f1)
for ((i=0;i<$N;i++))
do
echo $i
sed -n "$i p" "$FILE1"
sed -n "$i p" "$FILE2"
done
Hors ligne
#4 Le 17/05/2008, à 23:51
- fabrizio66
Re : [Résolu] Copier les lignes x de 2 fichiers texte
cat file1 > file
cat file2 >> file
fab
++
Hors ligne
#5 Le 18/05/2008, à 00:34
- Le Roi Newbie
Re : [Résolu] Copier les lignes x de 2 fichiers texte
Je vous remercie pour vos réponses rapides et claires !
Alors je les ai esseyées de la plus courte à la plus longue :
Les deux solutions de concaténage ne marchent pas comme je le souhaite : les fichiers sont bout à bout (moi je veux les croiser en fait).
Quand à la solution de Link31, c'est exactement ce que je veux ! Il y a même l'affichage de la variable i (c'est appréciable une telle réponse) ! J'ai juste corrigé un 'tit truc : le numéro de la première ligne n'est pas 0 mais 1. Donc il faut translater la boucle d'un cran :
FILE1="fichier1"
FILE2="fichier2"
N=$(wc -l "$FILE1" | cut -d" " -f1)
for ((i=1;i<=$N;i++))
do
echo $i >> nouveau_fichier.txt
sed -n "$i p" "$FILE1" >> nouveau_fichier.txt
sed -n "$i p" "$FILE2" >> nouveau_fichier.txt
done
PS : je savais pas qu'on pouvait faire du C++ en script ! C'est le seul langage que j'ai appris (enfin appris est un grand mot ), donc c'est bon à savoir !
PS2 : c'est mon premier script !
Merci beaucoup ! A bientôt !
Dernière modification par Le Roi Newbie (Le 18/05/2008, à 00:36)
Hors ligne
#6 Le 18/05/2008, à 00:53
- Link31
Re : [Résolu] Copier les lignes x de 2 fichiers texte
Hmm oui bien sûr, les numéros de lignes commencent à 1
Par contre tu devrais laisser le reste du script en l'état. L'intérêt était de faire quelque chose comme ça :
./script fichier1 fichier2 > nouveau_fichier
Et ainsi de ne pas hardcoder les noms des fichiers.
Et non, on ne peut pas faire de C/C++ en shell. La syntaxe du for est juste une exception permise par bash (et seulement bash).
En shell standard on aurait écrit ça :
for i in `seq 1 $N`
Hors ligne
#7 Le 18/05/2008, à 11:41
- Le Roi Newbie
Re : [Résolu] Copier les lignes x de 2 fichiers texte
Oki merci beaucoup !
Donc tant pis pour moi, pas de C++ !
Par contre j'aurais encore juste une 'tite question : je dois ajouter le charactère " à la fin des lignes copiées avec sed.
Je pensais le faire avec :
echo -e "\""
Mais il y le saut de ligne à la fin de sed qui me dérange !
Hors ligne
#8 Le 18/05/2008, à 11:55
- Le Roi Newbie
Re : [Résolu] Copier les lignes x de 2 fichiers texte
lol je viens de trouver :
J'ai créer une variable :
ligneF1=$(sed -n "$i p" "$FILE1)
echo -e " Ligne du fichier 1 = \"$ligneF1\"" >> nouveau_fichier.txt
Hors ligne