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.

ENSI-II2 - Environnement Unix

Document source

ENSI-II2 - Environnement Unix

Unix Programming, Scripting, AWK, SED · PDF · 2 pages

Afficher l'aperçu du document

Consulter le document original →

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' fichier où n est le numéro de la ligne à afficher.
  • Compter le nombre de mots d’un fichier : awk '{ total += NF } END { print total }' fichier Ici, NF est 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 }' fichier

Explication : 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.

Partager

Commentaires

Aucun commentaire pour le moment. Posez la première question.

Les commentaires sont relus avant publication. Votre e-mail n'est jamais affiché.

← Toutes les révisions