Petit script sur un texte

Fermé
keta - 19 mai 2007 à 16:33
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 - 24 mai 2007 à 14:17
bonjour,
j'ai un pb pour ecrire un petit script en shell bash , je débute
il consiste en 2 arguments , le premier est une ligne du texte, le 2 em le nouveau fichier crée; le script doit prendre le premier argument et le mettre tout en haut du fichier du 2 em argument ;

j'ai fait ceci
#! bin/bash
head -$1>>$2
ligne 1 >>$2
ligne2 >>$2

mais il plante avec une erreur head ;

8 réponses

jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
19 mai 2007 à 16:45
Salut,

Faudrait déjà lui indiquer le fichier d'entrée non ? Du style :
head -$1 fichier_entréee >> $2
Et puis à quoi corresponde les "ligne 1" "et ligne 2" ?

Montres-nous à quoi ressemble ton fichier d'entrée et à quoi doit ressembler ton fichier de sortie ($2).

;-))
0
oui c'est le problème ; à la base j'ai un fichier qui comprend
x lignes
ligne 1
ligne 2
ligne ..n
et avec un nouveau script j'ai mes 2 arguments ; le premier place la nouvelle ligne en haut du nouveau fichier (argument 2)
0
pocondeta_13 Messages postés 7 Date d'inscription samedi 19 mai 2007 Statut Membre Dernière intervention 20 mai 2007 2
19 mai 2007 à 20:11
Bonsoir,

si j'ai bien suvi tu veux un script tel que:

toto.sh "ma ligne de texte" monfichier.qqc

et tu dois retrouver en ligne 1 de monfichier.qqc la phrase "ma ligne de texte" puis des phrases qui viennent de ton script shell?

si c'est oui, voilà un script shell qui fait celà:
les {} c'est pour protéger les variables, c'est à ma connaissance une bonne habitude à prendre pour eviter des effets de bords ...

#!/bin/bash

echo ${1} > ${2}
echo "phrase 2" >> ${2}
echo "phrase 3" >> ${2}
echo "phrase 4" >> ${2}
echo "..." >> ${2}
echo "phrase n" >> ${2}
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
19 mai 2007 à 20:18
Salut,

si j'ai bien suivi tu veux un script tel que...
Il est bien là le problème, car moi j'ai pas du tout compris ça et c'est bien pourquoi je demandais des exemples précis, comme un bout du fichier d'entrée, un énoncé plus clair de ce que veut notre ami et un bout de son fichier de sortie tel qu'il doit être ...

;-))
0
pocondeta_13 Messages postés 7 Date d'inscription samedi 19 mai 2007 Statut Membre Dernière intervention 20 mai 2007 2 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
19 mai 2007 à 20:25
moui je sais, j'ai relu bien 3 ou 4 fois en decortiquant.
J'ai proposé une solution par rapport à ce que j'ai compris... c'est pas toujours facile d'expliquer correctement un problème et ces objectifs quand on découvre un nouvelle univers ... (moi c'est les vlans en ce moment .... )
Maintenant si ce n'est pas ça, on fera un V1.1 :)
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897 > jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020
19 mai 2007 à 20:29
moui je sais, j'ai relu bien 3 ou 4 fois en decortiquant.
Ben je dois en être à 10 ou 15 fois ;-((

J'ai proposé une solution par rapport à ce que j'ai compris...

Et je t'en remercie d'ailleurs

c'est pas toujours facile d'expliquer correctement un problème et ces objectifs quand on découvre un nouvelle univers ... (moi c'est les vlans en ce moment .... )
D'où la demande de copier/coller des fichiers (entrée/sortie)

Maintenant si ce n'est pas ça, on fera un V1.1 :)
;-DDD
0
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022 426
19 mai 2007 à 20:47
Il est clair que l'énoncé ne l'est pas du tout :D

Il faudrait soit l'énoncé exact (mot pour mot) sois des exemple concrets...
Moi je le comprend comme cela (enfin ça me parait être un exercice intéressant...)

Ajouter l'argument 1 en début du fichier passé en argument 2...

Ce qui pourrait se résoudre avec le script suivant:
#/bin/sh
LINE=$1
FILE=$2
sed -i -e "1i\ 
$LINE
" $FILE
Exemple:
PBG4:~/Work/temp adrien$ cat test.txt
ligne 1
ligne 2
ligne 3
ligne 4
...
ligne n
PBG4:~/Work/temp adrien$ ./ajoutL1.sh "ligne 0" test.txt 
PBG4:~/Work/temp adrien$ cat test.txt
ligne 0
ligne 1
ligne 2
ligne 3
ligne 4
...
ligne n
PBG4:~/Work/temp adrien$
Si c'est l'effet attendu, on peut te donner des détails sur la commande utilisée :)

++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
bonsoir , désolé pour mon explication et merci pour vos réponses ;
oui en entrée je veux ceci avec les 2 arguments :
monscript.sh (ligne à placer en haut du nouveau fichier)( nouveau fichier)
monscript contient les lignes
ligne 1
ligne2
etc...

et en sortie je veux donc : cat nouveaufichier

ligne à placer en haut du nouveau fichier
ligne1
ligne2
etc..

j'ai un problème avec la commande head .
0
asevere Messages postés 13084 Date d'inscription lundi 28 janvier 2002 Statut Webmaster Dernière intervention 3 février 2022 426
19 mai 2007 à 22:43
Bonche, du coup, je ne trouve pas ça logique comme exercice mais admettons.

Est-ce que les réponses de pocondeta_13 en 3 ou lami20j en 9 résolvent ton problème, oubien est-ce que tu dois avoir en resultat l'argument 1 suivi du contenu du script, c'est a dire:
paramètre_1
ligne 1
ligne 2
...
ou
paramètre_1
echo paramètre_1 > paramètre_2
echo ligne 1 >> paramètre_2
echo ligne 2 >> paramètre_2
...
?
0
lami20j Messages postés 21331 Date d'inscription jeudi 4 novembre 2004 Statut Modérateur, Contributeur sécurité Dernière intervention 30 octobre 2019 3 567
19 mai 2007 à 21:51
Salut,

Moi je comprends qu'il s'agit de la création d'un nouveau fichier dont le 1er argument sera la 1ère ligne et le reste des lignes sont codées en dur dans le script
$ cat ccm.sh
#!/bin/bash

echo $1 >> $2
echo ligne1 >> $2
echo ligne2 >> $2
$ sh ccm.sh "ligne à placer en haut du nouveau fichier" resultat.txt
$ cat resultat.txt
ligne à placer en haut du nouveau fichier
ligne1
ligne2
0
désolé de m être mal expliqué , on doit utiliser la commande head pour cet exo : on a un fichier (newfile) qui contient x lignes
line1
line2
line3

on doit écrire un script qui prend comme premier argument la nouvelle ligne à mettre en haut du fichier crée ci dessus (newfile), newfile sera le 2 èm argument qui affichera après lexecution du script :

nouvelle ligne
line1
line2
line3


jai essayé comme ceci mais jai une erreur head

head -$1 newfile >>$2
0
jipicy Messages postés 40842 Date d'inscription jeudi 28 août 2003 Statut Modérateur Dernière intervention 10 août 2020 4 897
24 mai 2007 à 14:17
Salut,

Je ne vois pas pourquoi tu t'obstines avec la commande "head", qui ne sert qu'à afficher "n" ligne(s) du début d'un fichier.

Tiens voilà une autre façon de faire :
#! /bin/bash

if [ "$#" -gt 2 ]; then
echo -e "trop de paramètres ! "
echo -e "Usage :\t$0 \"phrase entre guillemets\" fichier"
exit 3
fi

fichier=$(cat $2)
echo "$1" > "$2"
echo "$fichier" >> "$2"
cat "$2"
exit
La meilleure solution restant quand même celle d'asevere (post #7) utilisant la commande "sed" qui se prète tout a fait à ce genre d'exercice.
;-))
0