Commande awk

Fermé
pierrot782003 - 14 avril 2008 à 10:48
 pierrot782003 - 14 avril 2008 à 15:21
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 ??
A voir également:

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
14 avril 2008 à 12:41
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
pierrot782003
14 avril 2008 à 13:25
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
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
14 avril 2008 à 13:26
Affiche déjà ce que t'as fait qu'on y jette un œil...
0
pierrot782003
14 avril 2008 à 13:57
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

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

Posez votre question
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
14 avril 2008 à 14:11
$ 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
pierrot782003
14 avril 2008 à 14:29
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
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
14 avril 2008 à 14:38
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
pierrot782003
14 avril 2008 à 15:21
merci
0