Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/06/2007, 12h10   #1
Membre chevronné
 
Inscription : décembre 2004
Messages : 1 213
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 1 213
Points : 766
Points : 766
Par défaut problème avec la commande awk

Bonjour, j'ai un fichier qui a 6 colonnes. je veux diviser par deux toutes les colonnes, excepté la première. Voici mon script

Code :
1
2
3
4
5
 
#!/bin/sh
 
N=2
awk '{print $1,$2/$(N),$3/$(N),$4/$(N),$5/$(N),$6/$(N)}' toto > titi
et j'obtiens le message suivant :

Citation:
awk: (FILENAME=toto FNR=23201) Fatal: tentative de division par zéro
en revanche, si je fais

Code :
1
2
3
 
#!/bin/sh
awk '{print $1,$2/2,$3/2,$4/2,$5/2,$6/2}' toto > titi
tout marche très bien. Pourquoi ?

Enfin, comment faire en utilisant une boucle for ? Mes tentatives sont sans grands succes...

Merci.
salseropom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 12h33   #2
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 546
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 546
Points : 7 776
Points : 7 776
rien de plus normal ton N est une variable du shell et tu l'utilise dans ton awk c'est normal que awk ne la connaisse pas et provoque une division par zéro

tu dois integrer le contenu de N à awk lorsque tu l'appeles...
voilà comment faire trouvé sous google :
Using-Shell-Variables.html
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 12h44   #3
Membre chevronné
 
Inscription : décembre 2004
Messages : 1 213
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 1 213
Points : 766
Points : 766
Citation:
Envoyé par frp31
rien de plus normal ton N est une variable du shell et tu l'utilise dans ton awk c'est normal que awk ne la connaisse pas et provoque une division par zéro

tu dois integrer le contenu de N à awk lorsque tu l'appeles...
voilà comment faire trouvé sous google :
Using-Shell-Variables.html
OK, merci ça marche. Voici mon script

Code :
1
2
3
4
5
6
7
8
9
10
11
 
#!/bin/sh
 
N=2
 
sed 's/\./,/g' Mean.txt > toto
awk -v val=$N '{printf("%f",$1);for(i=2;i<=NF;i++) printf("\t%10e",$i/val); printf("\n")}' toto > titi
 
sed 's/,/\./g' titi > tata
mv tata Mean.txt
rm -f toto titi
salseropom est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 13h00   #4
Modérateur
 
Avatar de al1_24
 
Homme Alain
Ingénieur d'études décisionnel
Inscription : mai 2002
Messages : 4 450
Détails du profil
Informations personnelles :
Nom : Homme Alain
Âge : 51
Localisation : France, Val de Marne (Île de France)

Informations professionnelles :
Activité : Ingénieur d'études décisionnel
Secteur : Conseil

Informations forums :
Inscription : mai 2002
Messages : 4 450
Points : 7 559
Points : 7 559
Tu peux te dispenser de fichiers temporaires en utilisant les redirections...
Code :
1
2
3
4
5
6
7
 
#!/bin/sh
 
N=2
 
sed 's/\./,/g' Mean.txt | awk -v val=$N '{printf("%f",$1);for(i=2;i<=NF;i++) printf("\t%10e",$i/val); printf("\n")}' | sed 's/,/\./g' > tata
mv tata Mean.txt
[/quote]
__________________
Modérateur Langage SQL
Règles du forum Langage SQL à lire par tous, N'hésitez pas à consulter les cours SQL
N'oubliez pas le bouton et pensez aux balises [code]
Si une réponse vous a aidé à résoudre votre problème, n'oubliez pas de voter pour elle en cliquant sur
al1_24 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/06/2007, 13h02   #5
Membre chevronné
 
Inscription : décembre 2004
Messages : 1 213
Détails du profil
Informations forums :
Inscription : décembre 2004
Messages : 1 213
Points : 766
Points : 766
ah oui, c'est bien mieux. Merci.
salseropom est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 07h52.


 
 
 
 
Partenaires

Hébergement Web