• Aucun résultat trouvé

awkawk Introduction Introduction à l’utilitaireà l’utilitaire

N/A
N/A
Protected

Academic year: 2022

Partager "awkawk Introduction Introduction à l’utilitaireà l’utilitaire"

Copied!
19
0
0

Texte intégral

(1)

Introduction

Introduction à l’utilitaire à l’utilitaire

awk awk

(2)

Utilité Utilité

L’utilitaire awk recherche un ou plusieurs L’utilitaire awk recherche un ou plusieurs

patterns

patterns dans un ou plusieurs fichiers et dans un ou plusieurs fichiers et applique certaines

applique certaines actions actions sur les sur les enregistrements sélectionnés.

enregistrements sélectionnés.

Synopsis Synopsis

awk [-F

awk [-F c c ] –f ] –f program-file program-file [ [ file-list file-list ] ] awk awk program program [ [ file-list file-list ] ]

Délimiteur de champ spécifique

Délimiteur de champ spécifique

Fichier contenant le programme awk à

appliquer

Fichier contenant le programme awk à

appliquer

Programme awk à même la ligne de

commande Programme awk à

même la ligne de commande

Fichier(s) à traiter Fichier(s) à traiter

Note: délimiteurs par défaut:

Note: délimiteurs par défaut: SPACESPACE etet TABTAB

(3)

Aperçu du fonctionnement Aperçu du fonctionnement

pattern

pattern { { action action } }

programme awk programme awk ii

00

nn

fichier à traiter fichier à traiter kk

00

nn

for (k = 0; k < n; k++) for (k = 0; k < n; k++)

for (i = 0; i < n; i++)

for (i = 0; i < n; i++)

(4)

Patterns Patterns

Expressions régulières

Expressions régulières , , /regex/ /regex/ , avec ou sans , avec ou sans opérateurs

opérateurs ~ ~ (=) et (=) et !~ !~ (!=) (!=) exemples:

exemples:

/tion/

/tion/

enregistrements

enregistrements contenantcontenant la chaîne tion la chaîne tion

$1 ~ /tion/

$1 ~ /tion/

enregistrements dont le

enregistrements dont le 11erer champ contient tion champ contient tion

$3 !~ /tion/

$3 !~ /tion/

enregistrements dont le

enregistrements dont le 33ee champ ne contient pas champ ne contient pas la la chaîne

chaîne tiontion

(5)

Patterns (suite) Patterns (suite)

Opérateurs relationnels

Opérateurs relationnels (fonctionnent sur les (fonctionnent sur les nombres ainsi que sur les lettres):

nombres ainsi que sur les lettres): < < , , <= <= , , == == , , != != , ,

>=

>= et et > >

exemples:

exemples:

$1 > $2

$1 > $2

enregistrements où la valeur

enregistrements où la valeur 11erer champ champ est est supérieure

supérieure à celle du à celle du 22ee

$4” == “alpha” $4” == “alpha”

enregistrements dont le

enregistrements dont le 44ee champ est alpha champ est alpha

(6)

Patterns (suite) Patterns (suite)

Opérateurs booléens

Opérateurs booléens : : || || (ou) et (ou) et && && (et) (et) exemple:

exemple:

$3 >= 10

$3 >= 10 && && $3 < 20 $3 < 20

enregistrements où la valeur

enregistrements où la valeur 33ee champ champ est est supérieure ou égale à 10 et inférieure à 20 supérieure ou égale à 10 et inférieure à 20

Intervalles

Intervalles (spécifiés avec une virgule) (spécifiés avec une virgule) exemple:

exemple:

/début/,/fin/

/début/,/fin/

enregistrements inclus

enregistrements inclus entre les bornes /début/ entre les bornes /début/

et /fin/

et /fin/. Les bornes sont . Les bornes sont inclusesincluses dans l’intervalle. dans l’intervalle.

Le traitement de l’intervalle est

Le traitement de l’intervalle est récurrentrécurrent..

(7)

Patterns (suite) Patterns (suite)

Identificateurs uniques

Identificateurs uniques : : BEGIN BEGIN et et END END

l’identificateur

l’identificateur BEGINBEGIN permet d’effectuer une action permet d’effectuer une action avant

avant de commencer le traitement des fichiers. de commencer le traitement des fichiers.

l’identificateur

l’identificateur ENDEND permet d’effectuer une action permet d’effectuer une action après

après que le traitement des fichiers soit complété. que le traitement des fichiers soit complété.

exemple:

exemple:

BEGIN { print “Début du traitement” } BEGIN { print “Début du traitement” }

affiche la chaîne

affiche la chaîne “Début du traitement”“Début du traitement” sur la sur la sortie standard au lancement du programme,

sortie standard au lancement du programme, avantavant de commencer le traitement du/des fichier(s)

de commencer le traitement du/des fichier(s)

(8)

Actions Actions

Action

Action par défaut par défaut : : print print

print

print affiche sur la sortie standard. affiche sur la sortie standard.

il est possible de rediriger la sortie avec

il est possible de rediriger la sortie avec >>, , >>>> et et ||..

Il est possible de spécifier

Il est possible de spécifier plusieurs actions sur plusieurs actions sur une même ligne

une même ligne avec avec ; ; : : pattern {

pattern { action; action; action; action; action; action; } } Les actions peuvent être composées Les actions peuvent être composées

d’ d’ opérations logiques et arithmétiques opérations logiques et arithmétiques , de , de fonctions

fonctions , de , de variables variables , de , de tableaux associatifs tableaux associatifs , , de de structures itératives structures itératives et de et de structures structures

conditionnelles

conditionnelles . .

(9)

Actions (suite) Actions (suite)

exemple:

exemple:

$cat total.awk

$cat total.awk BEGIN {

BEGIN { total = 0total = 0; ; dix = 0dix = 0 } }

{ { total += $1total += $1 } }

$1 == 10 {

$1 == 10 { dix++dix++ } } END {

END { printf printf "Total: %d, Dix: %d\n",\"Total: %d, Dix: %d\n",\

total, dixtotal, dix }}

$awk –f total.awk nombres.txt

$awk –f total.awk nombres.txt Total: 98, Dix: 2

Total: 98, Dix: 2

$$

(10)

Actions (suite) Actions (suite)

exemple:

exemple:

$cat pgvp.awk

$cat pgvp.awk BEGIN {

BEGIN { pgv = -1pgv = -1 } }

$1 > pgv {

$1 > pgv { pgv = $1pgv = $1 } } END {

END { if (pgv == -1)if (pgv == -1)

{{

printf printf "Valeurs negatives\n""Valeurs negatives\n"

}}

elseelse

{{

printf printf "Plus grande valeur: %d\n",\"Plus grande valeur: %d\n",\

pgvpgv

}}

}}

$awk –f pgvp.awk nombres.txt

$awk –f pgvp.awk nombres.txt Plus grande valeur: 23

Plus grande valeur: 23

$$

(11)

Commentaires Commentaires

Tout ce qui suit le symbole

Tout ce qui suit le symbole # # sur une ligne est sur une ligne est considéré comme un commentaire

considéré comme un commentaire exemple:

exemple:

$cat commentaires.awk

$cat commentaires.awk BEGIN { pgv = -1

BEGIN { pgv = -1 # initialisation# initialisation

}}

$1 > pgv {

$1 > pgv { # si 1er champ > valeur sauvegardee,# si 1er champ > valeur sauvegardee,

# 1er champ devient valeur a battre# 1er champ devient valeur a battre

pgv = $1 }pgv = $1 } END { printf

END { printf "Plus grande valeur: %d\n",\"Plus grande valeur: %d\n",\

pgv }pgv }

(12)

Variables Variables

NRNR

$0$0 NFNF

$1$1 à $n à $n FSFS OFSOFS RSRS ORSORS FILENAME FILENAME

numéro de l’enregistrement courrant numéro de l’enregistrement courrant enregistrement courrant

enregistrement courrant

nombre de champs dans l’enregistrement nombre de champs dans l’enregistrement courrant

courrant les champs les champs

délimiteur de champs en entrée délimiteur de champs en entrée

par défaut: et par défaut: et

délimiteur de champs en sortie délimiteur de champs en sortie

par défaut:

par défaut:

délimiteur d’enregistrement en entrée délimiteur d’enregistrement en entrée

par défaut:

par défaut:

délimiteur d’enregistrement en sortie délimiteur d’enregistrement en sortie

par défaut:

par défaut:

nom du fichier en traitement nom du fichier en traitement

NEWLINE NEWLINE

SPACE

SPACE TABTAB

SPACE SPACE

NEWLINE NEWLINE

(13)

Fonctions Fonctions

length(str) length(str)

retourne la

retourne la longueurlongueur de la chaîne de caractères de la chaîne de caractères strstr si si strstr n’est pas spécifié, retourne la n’est pas spécifié, retourne la longueurlongueur de de l’enregistrement courrant

l’enregistrement courrant

int(num) int(num)

retourne la

retourne la portion entièreportion entière de de numnum

index(str1,str2) index(str1,str2)

retourne la

retourne la positionposition de de str2str2 dans dans str1str1 ou ou 00 si str1 ne si str1 ne contient pas

contient pas la chaîne la chaîne str2str2

(14)

Fonctions (suite) Fonctions (suite)

split(str,arr,del) split(str,arr,del)

construit

construit un tableau de jetonsun tableau de jetons ( (arrarr) où chacun de ces ) où chacun de ces derniers est un champ de la chaîne

derniers est un champ de la chaîne strstr découpé à l’aide découpé à l’aide du délimiteur

du délimiteur deldel retourne la

retourne la tailletaille du tableau créé du tableau créé

sprintf(fmt,args) sprintf(fmt,args)

retourne la

retourne la chaîne args formatéechaîne args formatée d’après le format d’après le format fmtfmt (fonctionne comme la fonction C du même nom) (fonctionne comme la fonction C du même nom)

substr(str,pos,len) substr(str,pos,len)

retourne une

retourne une chaîne de caractèreschaîne de caractères tirées de tirées de strstr à à partir de la position

partir de la position pos et de longueur pos et de longueur lenlen

(15)

Opérateurs arithmétiques Opérateurs arithmétiques

Tous les opérateurs suivants sont supportés:

Tous les opérateurs suivants sont supportés:

* * , , / / , , % % , , + + , , - - , , = = , , ++ ++ , , -- -- , , += += , , -= -= , , *= *= , , /= /= et et %= %= . .

(16)

Tableaux associatifs Tableaux associatifs

Un tableau associatif utilise des chaînes de Un tableau associatif utilise des chaînes de

caractères (appelées

caractères (appelées clés clés ) comme indices: ) comme indices:

array

array [ [ string string ] = ] = value value

Une construction particulière de boucle facilite Une construction particulière de boucle facilite

le parcours des tableaux associatifs:

le parcours des tableaux associatifs:

for for ( ( elem elem in in array array ) ) action action

Note: il est également possible de simuler un tableau Note: il est également possible de simuler un tableau traditionnel en utilisant des chaînes de caractères

traditionnel en utilisant des chaînes de caractères numériques…

numériques…

(17)

La fonction printf La fonction printf

Fonctionnement similaire à celui du langage C:

Fonctionnement similaire à celui du langage C:

printf

printf “ “ control-string control-string ” ” arg arg

11

, , arg arg

22

, , , , arg arg

nn

La chaîne de formatage (control-string) des La chaîne de formatage (control-string) des spécifications de conversion ayant la forme spécifications de conversion ayant la forme

suivante:

suivante:

% % [ [ - - ][ ][ x x [ [ .y .y ]] ]] conv conv

--

xx justification à gauchejustification à gauche

largeur minimale du champ affiché largeur minimale du champ affiché

(18)

La fonction printf (suite) La fonction printf (suite)

Les types de paramètres supportés (

Les types de paramètres supportés ( conv conv ) sont: ) sont:

dd nombre entiernombre entier

ee notation exponentiellenotation exponentielle ff nombre à point flottantnombre à point flottant

gg utiliser le plus court entre utiliser le plus court entre ee ou ou ff oo octaloctal

ss chaîne de caractèreschaîne de caractères xx hexadécimalhexadécimal

dans la chaîne de formatage:

dans la chaîne de formatage:

utiliser

utiliser \n\n pour un changement de ligne ( ) pour un changement de ligne ( ) utiliser

utiliser \t\t pour introduire une tabulation ( ) pour introduire une tabulation ( )TABTAB

NEWLINE NEWLINE

(19)

Exemples…

Exemples…

Références

Documents relatifs

By assessing the data quality measures for every locus, some locus-dependent characteristics, such as the presence of homopolymers, complex repeat patterns, similarity between

Par ailleurs, il faut noter que recv() retourne un tableau d’octets qu’il faut convertir en chaîne de caractères (str) Python avec la fonction decode() avant de l’afficher

Par ailleurs, il faut noter que recv() retourne un tableau d’octets qu’il faut convertir en chaîne de caractères (str) Python avec la fonction decode() avant de l’afficher

Soit la fonction suivante qui prend en entrée une structure nœud arbre racine d’un arbre binaire de recherche et un entier valeur et qui retourne l’arbre

Lecture fichier binaire : données stockées dans une chaîne de caractères... 3.2 str : chaîne d’octets (pas

Une pile est représentée par une structure regroupant un entier, pour le sommet, et un tableau de MAX_PILE éléments (ici, des caractères). II.1- En utilisant la

Or nous savons que le croisement test permettant aux allèles de F1 de s’exprimer dans la descendance, le % des phénotypes obtenus correspond aux gamètes produits par F1, donc F1

[r]