Exercice 1
NR = =1 { printf("%s\n",$0)} NR>1 { $5*=-1 $6+=0.1 $8=$4+$5+$6+$7 somme+=$8 printf("%s\n",$0)} END { printf("somme totale des valeurs corrigées %f \n",somme) > "resultat"; printf("valeur corrigée moyenne %f \n" (somme/(NR-1)) >> "resultat"} ' $1
Appelez votre script exo1.awk, donnez lui les droits 755, et appelez le ainsi:
exo1.awk mesure > mesure.corrigee
Après exécution, vérifiez l’existence et le contenu du fichier resultat.
Exercice 2
#!/bin/bash awk ' BEGIN { printf("Mesures ayant une année paire \n") > "paire";FS="|"} NR>1 { annee=substr($3,7,4) if (annee%2= =0) { printf("mesure %s ",$1); printf(" année %s paire\n ",annee) >> "paire"} ' $1
Appelez votre script exo2.awk, donnez lui les droits 755, et appelez le ainsi: {sidebar id=6}
exo2.awk mesure
Après exécution, vérifiez l’existence et le contenu du fichier paire.
Exercice 3
NR>1 && $2 !~ /^[0-3][0-9]\/[01][0-9]/\[0-9][0-9][0-9][0-9]$/ { printf(" Mauvais format de date pour mesure %s \n", $1 } NR>1 && $2 !~ /^[a-zA-Z][a-zA-Z]*$/ { printf(" Mauvais format du lieu pour mesure %s \n",$1 } ' $1
Appelez votre script exo3.awk, donnez lui les droits 755, et appelez le ainsi:
exo3.awk mesure
Le fonctionnement du script sous LINUX est un peu foireux, ça marche bien par contre sur d’autres environnements (HP-UX ou Solaris), va savoir pour quoi…
On pourrait améliorer encore plus la vérification en vérifiant bien que la date va de 1 à 31 et le mois de 1 à 12, avec un script du style:
#!/bin/csh NR>1 && $3 !~ /^[0-3][0-9]\/[01][0-9]/\[0-9][0-9][0-9][0-9]$/ { jour=substr($3,1,2) mois=substr($3,3,2) if (jour > 31 || mois >12) { printf("mauvais format pour mesure %s\n",$1)} } ' $1
C’est un peu lourd comme script, à vous de trouver plus simple. Toujours un fonctionnement capricieux sous LINUX.
Exercice 4
#!/bin/bash NR>1 { mesure-corrigee[$1]=$8 END { for (mesure in mesure-corrigee) {printf("mesure %s ",mesure); printf(" égale à %s \n",mesure-corrigee[mesure]) }} ' $1
Appelez votre script exo4.awk, donnez lui les droits 755, et appelez le ainsi:
exo4.awk mesure