Création d'un script

Bonsoir
je suis nouveaux dans le forum et j’aimerais resoudre un petit probleme concernant cet enonce
« Créer deux fichier f1.txt ayant comme contenu « Bonjour les amis » et f2.txt ayant comme contenu « du cours SE2 ». Écrire un script fusion.sh qui reçoit ces deux fichiers et qui va créer un troisième fichier f3.txt ayant comme contenu la fusion des deux premiers fichiers. Le contenu de f3.txt sera alors « Bonjour les amis du cours SE2 ». Le script affichera après le contenu du fichier f3.txt. Exécuter votre script. »
j’ai obtenu ce résultat
script imprime ecran
mais il y a un espace entre les deux fichiers.

Bonjour,

Comme il est souvent dit en informatique RTFM.
Parfois c’est plus ou moins complexe selon la longueur du manuel et la langue utilisée.
Le man de la commande « paste » ne fait que quelques lignes.

$ paste -d " " f1.txt f2.txt > f3.txt

1 J'aime

Bonjour,

Sauf que l’outil le plus approprié n’est pas paste mais bel et bien cat !

$ echo "Bonjour les amis" > f1.txt
$ echo "du cours SE2" > f2.txt
$ cat f1.txt f2.txt > f3.txt
$ printf '%s\n' f3.txt

Et pour afficher le résultat du troisième, on utilise plutôt echo ou printf ! :wink:

2 J'aimes

Pour ce genre de demande d’aide, essaie de privilégier le partage de copies en texte de ton script plutôt que des images :wink:

Ça nous permet entre autres de facilement copier-coller ce que tu partages pour le tester, et l’examiner dans de meilleurs conditions.

1 J'aime

Genial! merci cedric058 ca marche le paramètre * -d " " *
juste svp sans trop vous demander, pourries-vous me passer un site qui explique bien l’utilisation de paste avec des paramètres pour mon apprentissage.

ok je suis d’accord avec toi, mais je ne sais pas
comment le mettre. je copie direct sur la fenêtre. merci.

Sauf que dans ce cas le fichier f3.txt contient deux lignes et non pas le texte demandé

Une possibilité

cat f1.txt f2.txt | tr '\n' ' '  > f3.txt

Mais la fin de ligne est perdue. Pour la rétablir

⌁ fp2@debpacha:/tmp $ file f3.txt 
f3.txt: ASCII text, with no line terminators
⌁ fp2@debpacha:/tmp $ printf "\n" >> f3.txt 
⌁ fp2@debpacha:/tmp $ file f3.txt 
f3.txt: ASCII text
⌁ fp2@debpacha:/tmp $

Tout ceci est bien compliqué par rapport à la solution basée sur paste, d’autant plus que ce programme fait partie de coreutils (comme cat et printf et même tr)

Je dirais même plus : utilisez debmany

debmany coreutils

Cette commande vient du paquet debian-goodies.

Exercice : donner à 10% près le nombre de fichiers d’information affiché par la commande ci-dessus.

Cordialement,
Regards,
Mit freundlichen Grüßen,
مع تحياتي الخالصة


F. Petitjean
Ingénieur civil du Génie Maritime.

« Moi, lorsque je n’ai rien à dire, je veux qu’on le sache. » (R. Devos)

« Celui qui, parti de rien, n’est arrivé nulle part n’a de merci à dire à personne !! »
Pierre Dac

J’ai essaye PengouinPdt ton script mais ca ne donne pas le résultat escompte.
mais par contre le parametre -d " " que cedric058 m’a propose marche correctement. merci en tous cas pour ton aide. voir l’imprime ecrancap1

Bonjour

michel@debT450:~$ echo -n "Bonjour les amis"      > f1.txt
michel@debT450:~$ echo -n "du cours SE2"          > f2.txt
michel@debT450:~$ echo -n "$(<f1.txt) $(<f2.txt)" > f3.txt
michel@debT450:~$ echo "$(<f3.txt)"
Bonjour les amis du cours SE2
michel@debT450:~$ 

Dans ces 3 fichiers, il n’y a que le contenu qui était demandé dans l’énoncé,
et il n’y a donc aucun caractère retour à la ligne.

1 J'aime

salut littlejohn75 j’ai essaye ton script mais il y a eu un petit défaut qui est apparu
voir imprime ecran! fin du script s’est glisse après la fin f3.txtcap2|690x240

cap2

merci pour ton aide

Génial! MicP ta méthode marche aussi, je l’ai teste voir imprime écran
Merci pour ton aide. :grinning:cap 3

Création du fichier f1.txt :

echo -n "Bonjour les amis" > f1.txt

Création du fichier f2.txt :

echo -n "du cours SE2" > f2.txt

Le contenu du script fusion.sh :

#!/bin/bash

echo "$(<$1) $(<$2)" | tee f3.txt

Lancement du script :

michel@debT450:~$ ./fusion.sh  f1.txt  f2.txt
Bonjour les amis du cours SE2
michel@debT450:~$ 
1 J'aime

je vois qu’il y a une multitude de façon pour résoudre ce petit énoncé
Merci :grinning:

je pense qu’on peut le mettre dans un script pour exécuter un seul fois.

Oui, mais ce n’est pas ce qui était demandé dans l’énoncé :

J’avais d’ailleurs oublié de faire afficher par le script
le contenu du fichier f3.txt

1 J'aime
michel@xubu:~$ echo $(<f1.txt)
Bonjour les amis
michel@xubu:~$ 
michel@xubu:~$ echo $(<f2.txt)
du cours SE2
michel@xubu:~$ 

donc si j’ai bien compris on fait la création de deux fichier avec écho, puis on crée le script fusion.sh

#!/bin/bash
echo "$(<$1) $(<$2)" > f3.txt
echo $(<f3.txt)

et la fin on reviens dans le terminal et on exécute le script on donnant les deux fichiers.

juste tu peux me dire ce que ca signifie le parametre -n apres echo

Les commandes que tu reprends sont celles qui permettaient d’afficher le contenu des fichiers créés,
mais j’ai modifié mon message en les remplaçant par les commandes qui permettent
de créer les fichiers f1.txt et f2.txt

Dans le script, j’ai utilisé la commande tee
car elle permet d’afficher le flux tout en créant le fichier.

Voir la page du manuel de la commande tee :

man tee

À part la commande tee
toutes les autres commandes utilisées (echo, pipe et les commandes de redirection)
sont des commandes qui sont intégrées dans l’interpréteur de commandes bash

Tu peux lire les pages man du bash :

man bash

et lire aussi cette page web : https://wiki.bash-hackers.org/howto/redirection_tutorial

1 J'aime

Juste vite fait en passant, si un exercice de ce type necessite l’installation d’un package specifique non standard (i.e.: ne faisant pas partie d’une instalaltion de base )
C’est que ce n’est pas la bonne solution. la solution la pls simple est souvent la meilleure