Shell script touchy

Résolu
Bonjour,
J'ai un petit script à faire, voila ce que j'aimerai qu'il fasse:
j'ai un fichier source avec les données suivantes à l'interieur:
nom fich;var 1;var 2;var 3
fichier 1;titi;titi et tata;toto

et ainsi de suite pour chaque ligne (4 variables par lignes).
Au final, j'aimerai extraire pour chaque ligne, un fichier portant le nom de la 1ere variable, avec les autres variables insérées, par exemple:
fichier "nom fich" contenant les données:
ce fichier contient les données pour var 1 ainsi que pour var 2 mais aussi var 3.

Le texte sera toujours le meme pour chaque ligne, j'aurai ainsi pour le fichier "fichier 1":
ce fichier contient les données pour titi ainsi que pour titi et tata mais aussi toto.

Merci pour vous réponses à venir !

2 réponses

  1. Contributeur
    hello
    $ cat a1
    nom fich;var 1;var 2;var 3
    fichier 1;titi;titi et tata;toto 
    $ 
    $ awk 'BEGIN{OFS=FS=";"};{print $2,$3,$4 > $1}' a1
    $ 
    $ head ???*
    ==> fichier 1 <==
    titi;titi et tata;toto 
    
    ==> nom fich <==
    var 1;var 2;var 3
    $
    
    0
    1. Je m'incruste, mais pour info,

      A quoi sert le 'OFS=FS' ?
      FS=";" est pour le délimiteur, OK, mais la premiere partie, je ne saisis pas

      Merci :)
      0
    2. Modérateur
      Salut,

      C'est pour fixer le séparateur en sortie (OutputFieldSeparator) qui par défaut est un espace.
      0
    3. Contributeur
      OFS est le délimiteur en sortie. En faisant print $2,$3 la virgule représente OFS, par défaut <espace>, ici ;
       $ echo "aaa;bbb" | awk -F";" '{print $1,$2}'
      aaa bbb
      $ 
      $ echo "aaa;bbb" | awk 'BEGIN{FS=OFS=";"};{print $1,$2}'
      aaa;bbb
      $ 

      NB: -F";" et {FS=";"} sont equivalents
      0
    4. Merci pour ces éclaircissements !
      0
  2. Modérateur
    Salut,

    $ ls
    plop
    
    $ cat plop
    nom_fich;var 1;var 2;var 3
    fichier_1;titi;titi et tata;toto
    
    $ while IFS=';' read -r fich nom1 nom2 nom3; do touch "${fich}" && echo "Ce fichier contient les données pour ${nom1} ainsi que pour ${nom2} mais aussi ${nom3}." > "${fich}"; done < plop
    
    $ ls
    fichier_1  nom_fich  plop
    
    $ cat fichier_1
    Ce fichier contient les données pour titi ainsi que pour titi et tata mais aussi toto.
    
    $ cat nom_fich
    Ce fichier contient les données pour var 1 ainsi que pour var 2 mais aussi var 3.
    
    $

    ;-))
    0
    1. simplement (encore) parfait, merci !
      0