Petit script sur un texte

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 ;
Configuration: Windows XP
Internet Explorer 6.0

8 réponses

  1. Modérateur
    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
    1. 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
      1. 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
        1. Modérateur
          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
        2. @jipicymoui 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
        3. Modérateur
          @jipicymoui 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
      2. Webmaster
        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
        1. 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
          1. Webmaster
            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
        2. Modérateur
          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
          1. 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
            1. Modérateur
              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