Exercice Unix corrigé la commande awk

Exercice 1

#!/bin/bash
awk ' BEGIN { FS="|";OFS="|" }
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:

exo2.awk mesure

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

Exercice 3

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

#!/bin/bash	
awk ' BEGIN { printf("Affichage des mesures et de leur valeur corrigée \n");FS="|"}
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

Télécharger aussi :

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *