0% ont trouvé ce document utile (0 vote)
17 vues4 pages

TP Awk Linux Bash

Ce document présente un ensemble d'exercices pratiques sur l'utilisation de commandes Bash, sed, awk et d'autres outils de traitement de texte. Les tâches incluent la manipulation de fichiers, le filtrage de données, la transformation de formats, et l'écriture de scripts Bash. Il aborde également des concepts de planification de tâches avec crontab et des explications sur diverses commandes Unix.

Transféré par

sossalydie3
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
17 vues4 pages

TP Awk Linux Bash

Ce document présente un ensemble d'exercices pratiques sur l'utilisation de commandes Bash, sed, awk et d'autres outils de traitement de texte. Les tâches incluent la manipulation de fichiers, le filtrage de données, la transformation de formats, et l'écriture de scripts Bash. Il aborde également des concepts de planification de tâches avec crontab et des explications sur diverses commandes Unix.

Transféré par

sossalydie3
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Ce TP contient quatre parties et les fichiers sur lesquels toutes les commandes ont été exécutées se trouvent

dans la même archives tp_bash.tgz. Testez vos commandes sur les fichiers pour vous rassurer que cela
donne les bons résultats

I- Filtres dans un fichier et commandes usuelles


Considérant le fichier « fich_test_sed_phone.txt » Écrire une commande permettant d’obtenir les résultats
suivants :
1) En utilisant chacune de ces trois commandes sed , grep et awk
a) Afficher les lignes (les lignes entières) dont le nom commence par A ou B
b) Afficher les lignes (les lignes entières) dont le prénom commence par C ou D
c) afficher les lignes (les lignes entières) dont les noms sont terminés par X
2) Afficher le nombre de lignes respectant chacune des conditions précédentes (dans les questions 1-a, 1-b,
1-c) en combinant wc avec sed.
3) Pour compter le nombre de lignes respectant les mêmes conditions précédentes avec awk et grep point
besoin de commande supplémentaire. Trouver les moyens de le faire aisément avec ces 2 commandes.
4) Afficher les lignes dont les prénoms sont terminés par INE
5) En utilisant uniquement les commandes sed et awk
a) modifier les prénoms (uniquement les prénoms) ANDRE en STANISLAS (pour awk pensez à la fonction
sub ou gsub:chercher l’utilisation sur le net)
b) intervertir les noms et les prénoms (attention au nom et prénoms composés)
c) afficher les lignes dont les prénoms (uniquement les prénoms) sont GERARD
d) afficher tous les champs dans l’ordre inverse (c’est à dire du champ contact au champ Nom)
6) quelle commande ou série de commandes permet de :
a) donner le 2e prénoms le plus fréquent au format 9 ==> FOURNIER (vous pouvez extraire les prénoms
et leur appliquer les commandes sort et uniq)
b) donner le 3e nom le plus fréquent au format RICHARD = 8
c) transformer toutes les lettres majuscules en minuscule (dans tout le fichier)
d) afficher les lignes dont les noms sont uniquement de 4 lettres
e) afficher toutes les lignes en additionnant le 3e champ (Rang) pour en afficher en fin de ligne le total au
format suivant : (utiliser ici uniquement la commande awk)
ZOUINA NABIL:4C:1454:75009:H:179051575009:+33519158818
ZUCZEK LAURENT:4B:1179:77006:H:166010477006:+33824874612
ZURITA BORIS:5B:2844:13002:H:173021813002:+33108367115
Total Rang :5099404
4) en utilisant la commande awk trier le fichier en fonction du classement (2ème champ)
5) en utilisant la commande sort trier le fichier en fonction du classement (2ème champ)
6) Quelle commande ou série de commandes permet d’afficher les lignes dont les numéros de téléphone
sont terminés par 57
7) quelle commande ou série de commandes permet d’afficher les lignes dont les numéros de téléphones
sont des téléphones portables (commençant par +336 ou +337)
8) Écrire un script bash qui permet d’enregistrer chaque ligne au format xml avec comme nom de fichier
prenom_nom.xml les caractères spéciaux dans les noms prénoms seront remplacés par « _ » : Exemple :
Pour le premier enregistrement par exemple, le nom du fichier est christophe_abbes.xml et le contenu
sera :
<Nom> ABBES</Nom>
<Prenoms> CHRISTOPHE</Prenoms>
<Classement>4A</Classement>
<Rang>1068</Rang>
<Association>30005</Association>
<Genre>H</Genre>
<Licence>158050430005</Licence>
<Contact>+33237788291</Contact>

9) Le fichier [Link] contient des dates au format jj-mm-aa


a) Écrire une commande awk permettant de transformer les dates au format jj-mm-aaaa (Attention aux
années avant et après 2000 )
b) écrire une commande awk et sed qui affiche les lignes pour les personnes nées en janvier
c) écrire une commande awk et sed qui affiche les lignes pour les personnes nées après 80
d) Ajouter une entête (Prenoms, sexe,région,phone, lieu, date) au fichier avec la commande sed et awk
e) Écrire une commande awk permettant de compter le nombre de personnes par ville de naissance et
les afficher au format suivant (attention tous les chiffres doivent être alignés à droite comme suit :)
Panhouignan 4
Materi 2
Bonou 2
Djougou 4
Anneho 4
Dassa-Zounme 2
f) Écrire une commande awk permettant de compter le nombre de personnes par sexe et les afficher au
format suivant :
Masculin 51
Féminin 45
d) Trier par ordre croissant tout le fichier en fonction du lieu de naissance (utiliser la commande sort)
e) Transformer toutes les dates au format jj-mm-aaaa avec la commande sed en appliquant l’option -i
directement dans le fichier (attention tester avant pour ne pas avoir de surprise)
f) Trouver avec awk comment afficher le nombre de personnes par année de naissance au format suivant
; (on pourrait l’appliquer sur le fichier transformer par la commande sed précédente) :
2000 8
2001 3
2002 3
2004 2
2007 1
1980 4
1981 11
1982 4
g) utiliser le nouveau fichier obtenu pour afficher avec sed les lignes de ceux qui sont de cette génération
c’est à dire née il y au plus 25 ans de cela.
10) Chaque ligne du fichier [Link] est de la forme suivante : avec les champs séparés par des dièses:
Titre #Pays #Réalisateur #Nombre d'entrées en France #Semaines à l'affiche
a) Dans cet exercice vous utiliserez uniquement les actions de awk (et pas les motifs!) pour :
i Afficher la liste des films (sans les autres informations).
ii Afficher la liste des films suivis de leur pays de production entre parenthèses.
iii Afficher la liste des films français.
iv Afficher la liste des films restés à l'affiche plus de 15 semaines, suivis du nombre de semaines
(exemple: Skyfall : 18 semaines).
v Afficher le film resté à l'affiche le plus longtemps en.
vi Afficher la liste des films suivis de leurs réalisateurs de telle façon que les noms des réalisateurs soient
alignés ainsi:
Skyfall ............................................... ………………….Sam Mendes
L'Age de glace 4 : La Derive des Continents............ Steve Martino et Mike Thurmeier
Sur la piste du Marsupilami ........................………... Alain Chabat
Pour cela, vous utiliserez le fait que le plus long titre ne dépasse pas 55 caractères et une
boucle for.
vii Comptez le nombre total d'entrées pour tous les films de la liste.
viii Quel est le problème? Utilisez la fonction gsub pour le corriger.
ix Afficher la liste des films triée en ordre alphabétique. Pensez à utiliser un tableau.
x Afficher la liste des titres de film triée suivant l'ordre alphabétique des noms de réalisateurs. Indice:
utiliser 2 tableaux.
xi Afficher la liste des titres de film triée suivant l'ordre croissant du nombre de semaines. Indice:
attention aux doublons; 1 seul tableau suffit.
11) Décrypter le message contenu dans le fichier [Link] tout en sachant que les lettres de l’alphabet ont
toutes été inversées comme suit : abcdefg….. ont été remplacés dans l’ordre inverse lettre par lettre par
zyxwvut….. majuscules comme minuscules de a à z et de A à Z

II- Bash scripting


1) Écrire un script bash nommé [Link] qui donne tous les mots de 7 lettres
que l’on peut former avec une série de 7 lettres données en argument (utiliser le
fichier dictionnaire suivant sous Linux /usr/share/dict/french) ce fichier est aussi
attaché à l’archive. Exemple : ./[Link] bjnoruo (affiche le mot bonjour )

2) Modifier le script précédent pour afficher les mots de 4 à 7 lettres exemple :


./[Link] bjnoruo affiche les mots jour, brou, juron, buron,bonjour, etc.

III- Crontab
A- Donner la fréquence et l’heure d’exécution des commandes suivantes de façon détaillée :
1. 1 1 1 1 1 commande1
2. */2 1 * * 0-7/2 commande 2
3. */2 */2 */2 */2 */2 commande 3
4. 1-30/2 * * * 1-6/2 commande 4
5. * * * * * commande 5
B- La fréquence minimale que l’on peut obtenir est une commande par minute. Trouver comment exécuter
une commande 2 à 3 fois par minutes.

IV- Commandes usuelles


Que fait chacune des commandes suivantes ; donnez une breve explication:
1. myvar="some string"; echo ${#myvar}
2. echo jrnbeos | sed 's/./& /g' ou cat [Link]| sed 's/./& /g'
3. for a in $(seq 1 8);do tab[$a]=$(echo ebjourno|cut -c$a);done;grep ${tab[2]}<<<bonjour
4. find . -name '*.JPG' -type f -execdir rename -f 'y/A-Z/a-z/' {} \+
5. echo -e {a..z}"\n" | nl
6. sed -ne 's![vV]ers\|En +\(199[0-9]\)!01/01/\1!' [Link]
7. awk '{ print length, $0}' fich_test_sed_phone.txt
8. nl fich_test_sed_phone.txt |sed -n '1,+11p' quel est l’équivalent avec la commande « d » de sed
9. sed -n '$=' fich_test_sed_phone.txt
10. grep -v PHILIPPE fich_test_sed_phone.txt
11. awk 'NR<=11 {print " " NR," ", $0}' fich_test_sed_phone.txt
12. awk -F: '{$1=substr($1,1,1)tolower(substr($1,2)); print}' OFS=':' fich_test_awk
13. nl fich_test_sed | head -9| tail -2
14. tr ’[A-Z]’ ’[a-z]’ < fich_test_sed
15. grep -E -w ^[A-Z][a-z]{2} [Link]
16. awk -F: '{a[$2]++}END{for(i in a)print i,a[i]}' [Link]
17. awk -F":" 'NR>1{a[substr($7,0,4)]++}END{for(i in a)print i,a[i]}' fich_test_sed_phone.txt
18. awk -F":" 'NR>1{a[$1]=$2}END{for(i in a)print i,a[i]}' fich_test_awk
19. cat [Link] | sed 's/./& /g'
20. awk -F":" '{a[$1]=$4;asorti(a,d,sorted_in)}END{for(i in d)print d[i],":",a[d[i]]}' [Link]
(lisez bien le manuel de awk pour comprendre les fonctions asort et asorti ceci vous permettra de mieux expliquer la commande 20)

Vous aimerez peut-être aussi