Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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

big_smile 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 tongue), donc c'est bon à savoir !
PS2 : c'est mon premier script ! big_smile

Merci beaucoup ! A bientôt ! big_smile

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 smile

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++ ! tongue

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 ! roll

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