Commande awk

Bonjour,

Salut , en fait j'ai deux fichiers de données dans un meme répertoire.
Disons /toto/a.dat et /toto/b.dat Chacun de ces fichiers à 12 lignes 12 colonnes.

Je veux diviser la premiere colonne de a par celle de b si elle est différente de 0. Et ainsi de suite pour les douzes colonnes.
Et créer le fichier correspondant disons /toto/c.dat

Je pensais écrire un script avec la commande awk mais je coince

Une idée ??
Configuration: Linux Mandriva
Firefox 2.0.0.6

8 réponses

  1. Modérateur
    Salut,

    Une piste peut être... commence par coller tes 2 fichiers avec la commande "paste", puis à partir de là avec des boucles dans "awk", divises tes champs 1-13; 2-14; 3-15; etc. et dirige le résultat en fonction de ta condition (!= 0)...
    0
    1. Je dois surement mal faire mon script car il ne veut pas multiplier ou diviser les données de a par celles de b....

      Par contre pour ce qui est à l'intérieur d'un meme fichier ca va
      0
      1. Modérateur
        Affiche déjà ce que t'as fait qu'on y jette un œil...
        0
        1. Quand j'ecris : awk '{ print 100*$2/$3 }' a.dat >c.dat j 'ai du mettre les 12 colonnes de b dans le fichier a. Et la surprise : j'ai 58.32/65.98 et il execute 58/65 pourquoi ?

          Il doit y avoir un moyen plus simple d'utiliser la fonction awk au lieu de passer mes données dans le premier fichier

          Ex:

          a.dat b.dat
          1 35 1 44.35
          2 36 2 58.78
          3 34.56 3 69.44
          4 15 4 59.50
          5 14.45 5 88.52

          donc je veux un fichier c.dat avec 100*colonne a /colonneb

          1 78.92
          2 ...

          merci d'avance car je tourne en rond

          merci d'avance
          0
          1. Modérateur
            $ cat fic1
            1 35
            2 36
            3 34.56
            4 15
            5 14.45
            $ cat fic2
            1 44.35
            2 58.78
            3 69.44
            4 59.50
            5 88.52
            $ paste fic1 fic2
            1 35    1 44.35
            2 36    2 58.78
            3 34.56 3 69.44
            4 15    4 59.50
            5 14.45 5 88.52
            $ paste fic1 fic2 | awk '{ print $1,(100 * $2 / $4) }'
            1 79,5455
            2 62,069
            3 49,2754
            4 25,4237
            5 15,9091
            $
            ;-))
            0
            1. merci
              mais cela ne me calcul pas exactement ce que je veux.
              Si j(ai 23.16/58.97 il me calcule 23/58
              dc souci

              aurais-tu une idée ?
              0
              1. Modérateur
                Oui, il faut changer le séparateur des décimales par une virgule...
                $ cat fic1
                1 35
                2 36
                3 34,56
                4 15
                5 14,45
                $ cat fic2
                1 44,35
                2 58,78
                3 69,44
                4 59,50
                5 88,52
                $ paste fic1 fic2 | awk '{ print $1,(100 * $2 / $4) }'
                1 78,9177
                2 61,2453
                3 49,7696
                4 25,2101
                5 16,324
                $
                ;-))
                0