Exercices sur la commande awk

Les exercices portent sur le fichier mesure suivant:

nom de la mesure|lieu de la mesure|date de la mesure|valeur brute|correction 1|correction 2|correction 3|valeur corrigée|
marcel|brest|18/12/1998|12.5|1.34|1.23|-1.5|13.47|
polo|loctudy|21/05/1997|11.5|1.24|1.12|-1.2|12.66|
otto|camaret|04/09/1995|9.3|0.98|1.17|-1.12|10.33|
Le champ valeur corrigée est la somme algébrique de la valeur brute et des 3 corrections.

Exercice 1

Vous vous êtes bourrés sur le signe de la correction 1, de même dans la correction 2, vous avez découvert que vous avez commis une petite erreur et qu'il fallait lui ajouter 0.1. Modifier le fichier en prenant en compte ces corrections, faites en sorte que la valeur corrigée soit modifiée en conséquence.

Dans le même exercice vous afficherez la somme totale des valeurs corrigées et la valeur corrigée moyenne. Ces valeurs doivent être sauvegardées dans un fichier résultat.

Exercice 2

Afficher les mesures ayant une année paire. Redirigez le résultat de la recherche vers un fichier paire.

Exercice 3

Vérifiez que le format de la date jj/mm/aaaa est correcte ainsi que le format du lieu (formé que de lettres de l'alphabet en minuscules ou majuscules).

Exercice 4

Afficher les noms de mesure et leur valeur corrigée associée en vous servant d'un tableau associatif.

Exercice 1

1234567891011#!/bin/bashawk ' BEGIN { FS="|";OFS="|" }NR = =1 { printf("%s\n",$0)}NR>1 { $5*=-1$6+=0.1$8=$4+$5+$6+$7somme+=$8printf("%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

123456#!/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:

exo2.awk mesure

Après exécution, vérifiez l'existence et le contenu du fichier paire.

Exercice 3

1234567#!/bin/bash awk ' BEGIN { printf("Vérification du format \n";FS="|" }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:

C'est un peu lourd comme script, à vous de trouver plus simple. Toujours un fonctionnement capricieux sous LINUX.

Exercice 4

1234567#!/bin/bash awk ' BEGIN { printf("Affichage des mesures et de leur valeur corrigée \n");FS="|"}NR>1 { mesure-corrigee[$1]=$8END{ 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

Article publié le 30 Août 2010 Mise à jour le Mardi, 31 Août 2010 17:54 par Salim KHALIL