ENSI-II2 - Environnement Unix
Ce document présente des exercices pratiques sur l'utilisation des outils Unix AWK et SED. Il s'adresse aux étudiants et utilisateurs souhaitant maîtriser ces utilitaires pour le traitement de fichiers texte, l'extraction et la manipulation de données en ligne de commande.
D'après le document ENSI-II2 - Environnement Unix
Cet article a été rédigé automatiquement à partir du document source, puis vérifié avant publication.

Document source
Unix Programming, Scripting, AWK, SED · PDF · 2 pages
Afficher l'aperçu du document
Ce document présente des exercices pratiques sur l'utilisation des outils Unix AWK et SED. Il s'adresse aux étudiants et utilisateurs souhaitant maîtriser ces utilitaires pour le traitement de fichiers texte, l'extraction et la manipulation de données en ligne de commande.
AWK : Exercices pratiques
Exercice 1 : Commandes AWK pour divers traitements
- Afficher la nième ligne d’un fichier :
awk 'NR == n' fichieroùnest le numéro de la ligne à afficher. - Compter le nombre de mots d’un fichier :
awk '{ total += NF } END { print total }' fichierIci,NFest le nombre de champs (mots) sur chaque ligne. - Afficher les lignes de plus de 80 caractères :
awk 'length($0) > 80' fichier - Afficher les lignes qui contiennent exactement deux champs :
awk 'NF == 2' fichier - Afficher la liste des champs de chaque ligne dans un ordre inversé :
awk '{ for(i=NF; i>0; i--) printf "%s ", $i; print "" }' fichier - Compter le nombre de lignes qui contiennent la chaîne "l2ti" :
awk '/l2ti/ { count++ } END { print count }' fichier - Afficher toutes les lignes dont le premier champ est différent de celui de la ligne précédente :
awk '$1 != prev { print; prev = $1 }' fichier
Exemple d'affichage de la nième ligne
Pour afficher la 5e ligne d’un fichier nommé data.txt :
awk 'NR == 5' data.txt
Exercice 2 : Mots avec trois lettres majuscules adjacentes ou plus
Script AWK pour afficher tous les mots contenant au moins trois majuscules consécutives :
awk '{
for(i=1; i<=NF; i++) {
if ($i ~ /[A-Z]{3,}/) print $i
}
}' fichier
Exercice 3 : Fichiers accessibles en lecture uniquement par les autres utilisateurs
Script AWK pour afficher les fichiers dont les permissions indiquent que les autres utilisateurs ont uniquement le droit de lecture :
awk '$1 ~ /^.{7}r[^wxd]/ { print $0 }' fichierExplication : Le champ des permissions (premier champ) est analysé pour vérifier que le 8e caractère est un 'r' (lecture) et que les droits d'écriture et d'exécution pour les autres sont absents.
Exercice 4 : Dates de connexion des utilisateurs propriétaires de fichiers lisibles par les autres
Script AWK pour afficher les dates de connexion des utilisateurs propriétaires de fichiers avec permission de lecture pour les autres :
awk '$1 ~ /^.{7}r/ { print $3 }' fichier
Hypothèse : Le champ 3 contient la date de connexion, et le champ 1 les permissions.
Exercice 5 : Afficher les lignes dont le premier champ diffère de celui de la ligne précédente
Commande AWK :
awk '$1 != prev { print; prev = $1 }' fichier
Exercice 6 : Simulation de la commande « uniq » avec AWK
Script AWK éliminant les lignes redondantes et vides :
awk 'NF > 0 && $0 != prev { print; prev = $0 }' fichier
Exercice 7 : Vérification du nombre de champs dans un fichier avec séparateur ":"
Ce script AWK vérifie que chaque ligne d’un fichier utilise le même nombre de champs que la première ligne, avec ":" comme séparateur :
BEGIN { FS = ":" }
NR == 1 { n = NF; print "Chaque enregistrement doit comporter " n " champs" }
NR > 1 && NF != n {
print "Enregistrement " NR " a " NF " champs"
err++
}
END {
print "Le fichier " FILENAME " possède " NR " enregistrements"
if (err > 0)
print "Le fichier " FILENAME " comporte " err " enregistrement(s) erroné(s)"
else
print "Tous les enregistrements sont corrects."
}
Exemple d'exécution
Avec un fichier test :
nom:prenom:ville:telephone:fax
berger:jaques:paris:0639442212:0122339845
ben said:hamadi :71221993::
durond:marcel:marseille
Commande :
awk -f count.awk test
Sortie :
Chaque enregistrement doit comporter 5 champs Enregistrement 4 a 3 champs Le fichier test possède 4 enregistrements Le fichier test comporte 1 enregistrement(s) erroné(s)
SED : Commandes pour manipulations textuelles
- Afficher les lignes contenant trois majuscules successives :
sed -n '/[A-Z]\{3\}/p' fichier - Remplacer les mots "Computer" ou "comuter" par "COMPUTER" :
sed 's/Computer\|comuter/COMPUTER/g' fichier - Encadrer le premier nombre de chaque ligne avec des ** :
sed 's/\([0-9][0-9]*\)/**\1**/' fichier - Afficher un fichier à partir de la onzième ligne :
sed -n '11,$p' fichier - Imprimer les lignes commençant par le mot "From" :
sed -n '/^From/p' fichier - Supprimer les lignes contenant une chaîne donnée (exemple : "mot") :
sed '/mot/d' fichier - Supprimer les lignes ne contenant pas une chaîne donnée (exemple : "mot") :
sed -n '/mot/p' fichier
Significations des commandes sed
sed "s/toto/TOTO/" fichier: remplace la première occurrence de "toto" par "TOTO" sur chaque ligne.sed "s/toto/TOTO/3" fichier: remplace la troisième occurrence de "toto" par "TOTO" sur chaque ligne.sed "s/toto/TOTO/g" fichier: remplace toutes les occurrences de "toto" par "TOTO" sur chaque ligne.sed "s/toto/TOTO/w resultat" fichier: remplace la première occurrence de "toto" par "TOTO" et écrit les lignes modifiées dans le fichier "resultat".
Inverser l’ordre de la première et la deuxième colonne d’un fichier
Commande sed :
sed 's/^\([^ ]*\) \([^ ]*\)/\2 \1/' fichier
Explication : Cette expression capture la première et la deuxième colonne séparées par un espace et les échange.
Entourer chaque nombre contenu dans un fichier par deux 'a'
Commande sed :
sed 's/\([0-9][0-9]*\)/a\1a/g' fichier
N’afficher que les lignes contenant le nombre 55
Commande sed :
sed -n '/55/p' fichier
Glossaire des termes clés
- AWK : Langage de traitement de texte et de données en ligne de commande, spécialisé dans la manipulation de fichiers structurés en lignes et champs.
- NF : Variable AWK représentant le nombre de champs (mots) dans la ligne courante.
- NR : Variable AWK indiquant le numéro de la ligne courante.
- FS : Variable AWK définissant le séparateur de champs (par défaut espace, ici ":" pour certains exercices).
- SED : Stream Editor, outil Unix pour filtrer et transformer du texte en flux.
- Expression régulière : Motif utilisé pour rechercher ou manipuler des chaînes de caractères.
- Champ : Élément de données dans une ligne, séparé par un délimiteur (espace, deux-points, etc.).
- Script AWK : Ensemble d’instructions AWK pour automatiser des traitements sur des fichiers texte.
- Commande sed "s/pattern/replacement/" : Remplacement du premier motif trouvé par une chaîne donnée dans chaque ligne.
Points clés à retenir
- AWK est puissant pour manipuler des fichiers structurés en lignes et champs, avec des variables comme NR, NF, et FS.
- Les scripts AWK peuvent filtrer, compter, inverser l’ordre des champs, et simuler des commandes comme uniq.
- SED permet de faire des substitutions, suppressions, et extractions de lignes selon des motifs précis.
- Les expressions régulières sont essentielles pour identifier des motifs dans AWK et SED.
- La maîtrise des permissions Unix et de leur représentation textuelle permet d’écrire des scripts pour filtrer des fichiers selon les droits d’accès.
- Les commandes proposées peuvent être adaptées et combinées pour répondre à de nombreux besoins de traitement de texte en environnement Unix.
Commentaires
Aucun commentaire pour le moment. Posez la première question.