Commande awk sous unix

Yann -  
asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   -
Bonjour,

g un fichier toto.txt avec dedans :
val1
val2

je voudrais faire une boucle sur chaque ligne du fichier et affecter la valeur val1 à var1 et val2 à var2

avec : awk '{ print $1 }' toto.txt
je peux récupérer les 2 valeurs...mais pour les affecter ???

merci d'avance

4 réponses

  1. asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426
     
    Bon finalement j'ai jeté un oeil a awk :o)
    Avec un tableau, cela donne:

    awk 'BEGIN { i = 0 }; { table[i] = $1 }; { i++ }; END { i=0 }; END { for ( i in table )  print table[i]   }  ' toto

    On commence par mettre i à zero,
    Pour chaque passage (chaque ligne), on met $1 dans table[i] et on incremente i,
    Apres le traitement de tout le fichier, on remet i à zero,
    et on fini pas afficher toute les valeurs du tableau... <-- c'est la que tu peut manipuler tes donées par exemple!

    @++

    Na kaer eo va Breizh,
    gand ar mor glaz èn-dro dezi !
    2
    1. Pitu Messages postés 1460 Statut Contributeur 125
       
      Grrrrrr ...
      J'avais dit que je regarderai aujourd'hui ...
      Et toi, tu me casses la baraque. ;o)
      Bon, ceci dit, j'aurais pas dit mieux.
      a +

        (:•Þ   Pitu
      Sauvez mon hamac, Bouffez Castor !
      0
      1. asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426 > Pitu Messages postés 1460 Statut Contributeur
         
        Salut Pitu,
        Désolé, :o)

        Mais je m'ennuyait vraiment terriblement hier soir! J'ai pas résisté!

        @++

        Na kaer eo va Breizh,
        gand ar mor glaz èn-dro dezi !
        0
  2. asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426
     
    Salut Pitu, salut Yann,

    Comme l'a dit Pitu, si tu ne sais pas combien de variables tu as dés le départ, ca va être coton... sauf en passant par des tableaux ! :o)
    Voici un petit exemple. Comme je ne sais pas si tu veut que ce soit awk qui fasse tout ou bien si tu veut passer par un script, par fleme de faire les deux, et de me replonger dans awk, je te copie-colle un script bash.
    Si tu veux tout faire avec awk, ce doit etre faisable puisqu'il gére les tableaux...
    [shell]# cat toto
    val1
    val2
    val3
    [shell]# cat test_toto 
    #!/bin/bash
    IFS=$'\n';
    var=($(awk '{print $1}' toto));
    #toutes les valeur sont mises dans le tableau $var
    
    count=$(wc -l toto | tr -s ' '| cut -f2 -d\ );
    i=0;
    while [ $i -lt $count ]; 
    do
    	i=$(($i+1));
    	echo "var["$i"]="${var[$(($i-1))]}; 
    done;
    #affichage.
    
    [shell]# chmod +x test_toto
    [shell]# ./test_toto 
    var[1]=val1
    var[2]=val2
    var[3]=val3
    [shell]# 

    Tu as toute tes valeur dans le tableau $var[*] indicé de 0 à $count a toi d'en faire ce qu'il te plait :o)
    @++

    Na kaer eo va Breizh,
    gand ar mor glaz èn-dro dezi !
    1
  3. Pitu Messages postés 1460 Statut Contributeur 125
     
    Bonjour Yann.
    Normallement, ça ne devriat pas poser trop de pb de faire ce que tu souhaites.
    J'ai fait quelques essais cet après-midi, et je n'ai pas tout à fait réussi, mais je ne désespère pas te trouver une solution.
    Là, j'ai pas d'unix sous la main, mais je vais essayer de trouver un peu de temps demain pour t'aider.
    Par contre, est-ce que tu connais à l'avance le nombre de variables que tu auras à affecter (et leur noms), ou est-ce que les noms de tes variables doivent être calculés automatiquement ? (si oui, je risque de coincer).
    A +
      (:•Þ   Pitu
    Sauvez mon hamac, Bouffez Castor !
    0
  4. Yann
     
    Merci à tous...en effet, je ne sais pas combien g de variables...mais avec votre aide,
    g trouvé mon bonheur !!!

    Merci encore

    @ plus

    Yann
    0
    1. asevere Messages postés 13095 Date d'inscription   Statut Webmaster Dernière intervention   426
       
      De rien :o)

      @++

      Na kaer eo va Breizh,
      gand ar mor glaz èn-dro dezi !
      0