Solutions des exercices 1) Trver les employés dont le prénom est "Annie"? nawk F: ' $1=="Annie" { print $0 ' salaire nawk F: ' $1 ~ /Annie/ { print ' salaire 2) Trver les employés dont le prénom débute par la lettre "L"? nawk F: ' /^L/ { print ' salaire nawk F: ' $1 ~ /^L/ { print ' salaire 3) Trver les employés dont le prénom est "Annie" "Luc"? nawk F: ' $1 ~ /Annie/ $1 ~ /Luc/ { print ' salaire nawk F: ' ($1 == "Annie" $1 == "Luc") { print ' salaire 4) Trver les employés dont le prénom est "Annie" et le nom "Therrien"? nawk F: ' $1 ~ /Annie/ && $2 ~ /Therrien/ { print ' salaire nawk F: ' ($1 == "Annie" && $2 == "Therrien") { print ' salaire 5) Trver les employés dont le prénom et le nom sont passé en paramètre? Directement dans le shell en tappant les paramètres dans l'appel de nawk : nawk F: -v pnom="annie" v nom="therrien" ' ($1 == pnom && $2 == nom) { print ' salaire En passant par un fichier de commande avec les paramètres du shell #affichepnn echo "Recherche de l'employé : $2, $1" echo nawk F: -v pnom=$1 v nom=$2 ' ($1 == pnom && $2 == nom) { print ' salaire echo echo Fin de la recherche par Marie-Chantal Denis crs 11 page : 1 de 7
EXECUTION DU FICHIER affichepnn merlin> affichepnn Annie Therrien Recherche de l'employi : Therrien, Annie Annie:Therrien:123-456-854:15:35:Jeudi Novembre 15 22:44:41 EST 2001 Annie:Therrien:123-456-854:18:35:Jeudi Novembre 8 20:44:41 EST 2001 Fin de la recherche merlin> 6) Calculer la paie des employés qui ont travaillé? (nombre d'heure <> de 0) # paiebrut # fichier qui contient les données en paramètre nawk F: ' BEGIN { print "\t\tcalcul de la paie des employés\n\n" END { print "\n\n\tfin du calcul de la paie \n\n" ( $5!= 0 ) { printf(" Nom : %s, %s \t\ttaux : %d \tnbheure : %d \tbrut : %d \n",$2,$1,$4,$5, $4*$5) ' $1 EXECUTION DU FICHIER paiebrut merlin> paiebrut salaire Calcul de la paie des employis Nom : Therrien, Annie Taux : 15 NbHeure : 35 Brut : 525 Nom : Duquette, Luc Taux : 10 NbHeure : 30 Brut : 300 Nom : Duquette, Luc Taux : 10 NbHeure : 30 Brut : 300 Nom : Vivier, Andre Taux : 22 NbHeure : 30 Brut : 660 Nom : Comeau, Lis Taux : 15 NbHeure : 35 Brut : 525 Nom : Therrien, Annie Taux : 18 NbHeure : 35 Brut : 630 Nom : Vivier, Andre Taux : 15 NbHeure : 35 Brut : 525 Fin du calcul de la paie par Marie-Chantal Denis crs 11 page : 2 de 7
7) Afficher la date du système à l'aide de getline? # bonjr BEGIN { print "bonjr " "date " getline date = $3 " " $2 " " $NF ; heure = substr($4,1,5) print "Le " date " a " heure " au revoir " 8) Transformer la date ss le format aaaammjj? Pr ce faire il y a plusieurs solutions. On prrait tt simplement modifier le séparateur pr un autre symbole (par exemple *,?,#) et ce avant d'ajter la date au fichier. Pr cette solution, on va utiliser le fichier comme il est présentement. $6=Jeudi Novembre 15 22, $7=44, $8=41 EST 2001 a) Récupération de $6 et $8 nawk F: ' { print $6 $8 >> "newsalaire" ' salaire Voici la structure du fichier newsalaire. Maintenant on peut extraire la date Jeudi Novembre 15 2241 EST 2001 Jeudi Novembre 08 2041 EST 2001 Jeudi Novembre 01 1241 EST 2001 b) Modifier le format nawk ' ($2 == "Octobre") { print $6 "10" $3 >> "datesalaire" ($2 == "Novembre") { print $6 "11" $3 >> "datesalaire" ' newsalaire Voici le contenu du fichier datesalaire : 20011115 20011108 20011101 par Marie-Chantal Denis crs 11 page : 3 de 7
c) Ajter avec PASTE la colonne datesalaire au fichier salaire paste -d: salaire datesalaire > salaire2 -d: représente le délimiteur(séparateur) entre les fichier salaire et datesalaire $9 devient donc égale à la date en format aaaammjj Voici le contenu du fichier salaire2 Annie:Therrien:123-456-854:15:35:Jeudi Novembre 15 22:44:41 EST 2001:20011115 Luc:Duquette:562-854-785:10:30:Jeudi Novembre 08 20:40:41 EST 2001:20011108 Pierre:Lampron:235-987-652:18:0:Jeudi Novembre 01 12:44:41 EST 2001:20011101 9) Trier les données en fonction de la date (dans le nveau format) Ns allons maintenant trier le fichier en fonction de la date sort -t: +8 salaire2 > salaire3 Puisque sort tri sur la 1 er colonne, ns lui demandons de trier 8 colonnes plus loin donc sur la 9 ième colonne qui est la date en format aaaammjj Ns pvons donc faire des opérations en fonction des dates sur le fichier salaire3 10) Trver le salaire maximum à l'aide d'une fonction? # salmax BEGIN { FS=":" ; print "\ttrver le plus grand des salaires\n\n" ; maximum=0 { maxsal($4,$5); print $2 ", " $1 " salaire : $" $4*$5 END { print "\n\n\tvoici le plus grand salaire : " maximum "\n" function maxsal (taux, hrs) { salaire=taux*hrs if (maximum < salaire) { maximum = salaire par Marie-Chantal Denis crs 11 page : 4 de 7
EXECUTION DU FILTRE SUR LE FICHIER salmax merlin> nawk -f salmax salaire3 Trver le plus grand des salaires Comeau, Lis salaire : $525 Lampron, Pierre salaire : $0 Vivier, Andre salaire : $660 Duquette, Luc salaire : $300 Voici le plus grand salaire : 660 11) Calculer la paie cumulative des employés (utiliser les tableaux)? # cumul BEGIN { FS=":"; print "\ncumulatif DES EMPLOYES\n" # lecture des infos dans le tableau $5!= 0 { tabnas[$3] += $4*$5 tabnom[$3] = $1 ", " $2 # afficahge du tableau END { for (i in tabnas) { print "Nom : ", tabnom[i], " Cumulatif : $", tabnas[i] EXECUTION DU FILTRE SUR LE FICHIER cumul merlin> nawk -f cumul salaire CUMULATIF DES EMPLOYES Nom : Lis, Comeau Cumulatif : $ 525 Nom : Andre, Vivier Cumulatif : $ 1185 Nom : Annie, Therrien Cumulatif : $ 1155 Nom : Luc, Duquette Cumulatif : $ 600 par Marie-Chantal Denis crs 11 page : 5 de 7
12) Calculer la paie cumulative d'un employé dont on lit au clavier son NAS? # cumulnas echo "Taper le NAS de l'employe : \c" read no nawk F: -v nas=$no ' BEGIN { printf "\ncumulatif DES EMPLOYES\n" # lecture des infos dans le tableau ($5!= 0 && $3 == nas) { tabnas[$3] += $4*$5 tabnom[$3] = $1 ", " $2 # affichage du tableau END { for (i in tabnas) { print "Nom : ", tabnom[i], " Cumulatif : $", tabnas[i] ' salaire echo "" echo "Fin du calcul de l'employe" EXECUTION DU PROGRAMME cumulnas merlin> cumulnas Taper le NAS de l'employe : 123-456-854 CUMULATIF DES EMPLOYES Nom : Annie, Therrien Cumulatif : $ 1155 Fin du calcul de l'employe par Marie-Chantal Denis crs 11 page : 6 de 7
13) Calculer le montant total des paies par périodes (total du 15/11, du 8/11) # cumulp nawk ' BEGIN { FS=":"; print "\ncumulatif DES PERIODES\n" # lecture des infos dans le tableau $5!= 0 { tabperiode[$9] += $4*$5 # afficahge du tableau END { for (i in tabperiode) { print "Période : ", i, " Cumulatif : $", tabperiode[i] ' salaire3 EXECUTION DU PROGRAMME cumulp merlin> cumulp CUMULATIF DES PERIODES Piriode : 20011115 Cumulatif : $ 1350 Piriode : 20011101 Cumulatif : $ 525 Piriode : 20011108 Cumulatif : $ 1590 par Marie-Chantal Denis crs 11 page : 7 de 7