Création d'un script

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'aime

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

Quand tu as un doute, ou que tu ne sais pas,
prends le réflexe d’aller lire page de manuel de la commande
ou/et de l’interpréteur de commandes que tu utilises.

Donc, tu pourrais rechercher la commande echo en lisant les pages man du bash :

man bash

pour y trouver, entre autres, ceci :

…
       echo [-neE] [arg ...]
              Output  the args, separated by spaces, followed by a newline.
              The return status is 0 unless a write error occurs.
              If -n is specified, the trailing newline is suppressed.
              If the -e option is given, interpretation of the following backslash-escaped characters is enabled.
              The -E option disables the interpretation of these escape characters, even on systems where they are interpreted by default.
              The xpg_echo shell option may be used to dynamically determine whether or not echo expands these escape characters by default.
              echo does not interpret -- to mean the end of options.
              echo interprets the following escape sequences:
              \a     alert (bell)
              \b     backspace
              \c     suppress further output
              \e
              \E     an escape character
              \f     form feed
              \n     new line
              \r     carriage return
              \t     horizontal tab
              \v     vertical tab
              \\     backslash
              \0nnn  the eight-bit character whose value is the octal value nnn (zero to three octal digits)
              \xHH   the eight-bit character whose value is the hexadecimal value HH (one or two hex digits)
              \uHHHH the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHH (one to four hex digits)
              \UHHHHHHHH
                     the Unicode (ISO/IEC 10646) character whose value is the hexadecimal value HHHHHHHH (one to eight hex digits)
…

Dans les fichiers f1.txt et f2.txt je n’ai mis que ce qui était demandé dans l’énoncé,
et dans cet énoncé, il n’était pas demandé de mettre un retour à la ligne,
donc, j’ai utilisé l’option n de la commande echo pour qu’il n’y ait aucun retour à la ligne dans ces deux fichiers.

Mais finalement, je réalise qu’en utilisant la commande tee
je n’ai pas tout-à fait respecté la demande de l’énoncé,
puisque ce n’est pas le contenu du fichier f3.txt qui est affiché,
c’est le flux qui est envoyé dans le fichier f3.txt qui s’affiche.

1 J'aime