You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
601 lines
22 KiB
601 lines
22 KiB
8 months ago
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
|
||
|
<head>
|
||
|
<TITLE>Unix: la commande Awk</TITLE>
|
||
|
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-15" />
|
||
|
<meta http-equiv="Content-Style-Type" content="text/css" />
|
||
|
<meta http-equiv="Content-Language" content="fr" />
|
||
|
<LINK REL="stylesheet" media="screen" title="style_unix" HREF="style_unix.css" TYPE="TEXT/CSS">
|
||
|
<script type="text/javascript">
|
||
|
|
||
|
var _gaq = _gaq || [];
|
||
|
_gaq.push(['_setAccount', 'UA-17315432-4']);
|
||
|
_gaq.push(['_setLocalRemoteServerMode']);
|
||
|
_gaq.push(['_trackPageview']);
|
||
|
|
||
|
(function() {
|
||
|
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
||
|
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
||
|
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
||
|
})();
|
||
|
|
||
|
</script>
|
||
|
</head>
|
||
|
<BODY>
|
||
|
|
||
|
<div id="conteneur">
|
||
|
<P class="entete1">
|
||
|
<A HREF="index.html" class="case_menu"><IMG SRC="images/home.png" BORDER=1 WIDTH=50 HEIGHT=50 ALT="home www.shellunix.com" title="accueil"></A>
|
||
|
<A HREF="commandes.html" class="case_menu"><IMG SRC="images/cmde.png" BORDER=1 WIDTH=50 HEIGHT=50 ALT="commandes Unix"></A>
|
||
|
<A HREF="sh.html" class="case_menu"><IMG SRC="images/sh.png" BORDER=1 WIDTH=50 HEIGHT=50 ALT="Shell unix: sh"></A>
|
||
|
<A HREF="csh.html" class="case_menu"><IMG SRC="images/csh.png" BORDER=1 WIDTH=50 HEIGHT=50 ALT="Shell unix: csh"></A>
|
||
|
<A HREF="ksh.html" class="case_menu"><IMG SRC="images/ksh.png" BORDER=1 WIDTH=50 HEIGHT=50 ALT="Shell unix: ksh"></A>
|
||
|
<A HREF="regexp.html" class="case_menu"><IMG SRC="images/re.png" BORDER=1 WIDTH=50 HEIGHT=50 ALT="expressions r�guli�res"></A>
|
||
|
<A HREF="sed.html" class="case_menu"><IMG SRC="images/sed.png" BORDER=1 WIDTH=50 HEIGHT=50 ALT="sed"></A>
|
||
|
<A HREF="awk.html" class="case_menu"><IMG SRC="images/awk.png" BORDER=1 WIDTH=50 HEIGHT=50 ALT="awk"></A>
|
||
|
<A HREF="perl.html" class="case_menu"><IMG SRC="images/perl.png" BORDER=1 WIDTH=50 HEIGHT=50 ALT="perl"></A>
|
||
|
</P>
|
||
|
<P class="entete2"><A HREF="kindle_awk.html" title="awk_pdf">Vous avez trouv� cette page utile, Vous pouvez l'obtenir ici au format kindle (amazon).</A></p>
|
||
|
<HR>
|
||
|
<UL>
|
||
|
<H1>
|
||
|
<CENTER>
|
||
|
La commande awk
|
||
|
</CENTER>
|
||
|
</H1>
|
||
|
<LI> <A HREF="#var_predef">Les variables pr�d�finies </A>
|
||
|
<LI> <A HREF="#motif"> Syntaxe du motif </A>
|
||
|
<LI> <A HREF="#action"> Syntaxe de l'action </A>
|
||
|
<UL>
|
||
|
<LI> <A HREF="#fonctions_num"> Fonctions num�riques </A>
|
||
|
<UL>
|
||
|
<LI> <A HREF="#char"> Les fonctions sur les chaines de caract�res</A>
|
||
|
<LI> <A HREF="#fonctions_arithmetiques"> Les op�rations arithm�tiques
|
||
|
et les affectations </A>
|
||
|
</UL>
|
||
|
<LI> <A HREF="#var"> Les variables et expressions </A>
|
||
|
<LI> <A HREF="#operations"> Les op�rations arithm�tiques </A>
|
||
|
<LI> <A HREF="#var_champs"> Les variables de champs </A>
|
||
|
<LI> <A HREF="#concat"> concat�nation de chaines de caract�res </A>
|
||
|
<LI> <A HREF="#while"> while </A>
|
||
|
<LI> <A HREF="#for"> for </A>
|
||
|
<LI> <A HREF="#break"> breack, continue </A>
|
||
|
<LI> <A HREF="#if"> if , else </A>
|
||
|
<LI> <A HREF="#comment"> commentaire et action vide </A>
|
||
|
<LI> <A HREF="#next"> next, exit </A>
|
||
|
<LI> <A HREF="#affichage"> affichage </A>
|
||
|
<LI> <A HREF="#tableau"> tableau </A>
|
||
|
<LI> <A HREF="#for"> for et les tableau</A>
|
||
|
<LI> <A HREF="#tableau_multi"> simulations des tableau multidimensions </A>
|
||
|
</UL>
|
||
|
</UL>
|
||
|
Cette commande permet d'appliquer un certain nombre d'actions sur un fichier.
|
||
|
La syntaxe est inspir�e du C
|
||
|
<H1>syntaxe </H1>
|
||
|
awk [-Fs] [-v variable] [-f fichier de commandes] 'program' fichier
|
||
|
<TABLE>
|
||
|
<TR>
|
||
|
<TD WIDTH="18"> </TD>
|
||
|
<TD WIDTH="10"> -F </TD>
|
||
|
<TD WIDTH="468"> Sp�cifie les s�parateurs de champs </TD>
|
||
|
<TR>
|
||
|
<TD WIDTH="18"> </TD>
|
||
|
<TD WIDTH="10"> -v </TD>
|
||
|
<TD WIDTH="468"> D�finie une variable utilis�e � l'int�rieur du programme.
|
||
|
</TD>
|
||
|
<TR>
|
||
|
<TD WIDTH="18"> </TD>
|
||
|
<TD WIDTH="10"> -f </TD>
|
||
|
<TD WIDTH="468"> Les commandes sont lu � partir d'un fichier. </TD>
|
||
|
</TABLE>
|
||
|
<H1>principe de fonctionnement </H1>
|
||
|
Le programme awk est une suite d'action de la forme : motif { action } , le motif
|
||
|
permet de determiner sur quels enregistrements est appliquée l'action.
|
||
|
<DL>
|
||
|
<DT>Un enregistrement est :
|
||
|
<DD>une chaine de caract�res s�par�e par un retour chariot, en général
|
||
|
une ligne.
|
||
|
<DT>Un champs est :
|
||
|
<DD>une chaine de caract�res separ�e par un espace (ou par le caract�re specifi�
|
||
|
par l'option -F), en générale un mot.
|
||
|
</DL>
|
||
|
<P>On acc�de � chaque champs de l'enregistrement courant par la variable <I>$1</I>,
|
||
|
<I>$2</I>, ... <I>$NF</I>. <I>$0</I> correspond � l'enregistrement complet.
|
||
|
La variable <I>NF</I> contient le nombre de champs de l'enregistrement courant,
|
||
|
la variable $NF correspond donc au dernier champs.</P>
|
||
|
<H2>Exemples </H2>
|
||
|
<P>
|
||
|
<TABLE>
|
||
|
<TR>
|
||
|
<TD> <CODE> awk -F ":" '{ $2 = "" ; print $0 }' /etc/passwd </CODE> </TD>
|
||
|
<TD>imprime chaque ligne du fichier /etc/passwd apr�s avoir effac� le deuxi�me
|
||
|
champs</TD>
|
||
|
<TR>
|
||
|
<TD><CODE> awk 'END {print NR}' fichier </CODE> </TD>
|
||
|
<TD>imprime le nombre total de lignes du fichiers</TD>
|
||
|
<TR>
|
||
|
<TD><CODE> awk '{print $NF}' fichier </CODE> </TD>
|
||
|
<TD>imprime le dernier champs de chaque ligne</TD>
|
||
|
<TR>
|
||
|
<TD><CODE> who | awk '{print $1,$5}' </CODE> </TD>
|
||
|
<TD>imprime le login et le temps de connexion.</TD>
|
||
|
<TR>
|
||
|
<TD><CODE> awk 'length($0)>75 {print}' fichier </CODE> </TD>
|
||
|
<TD>imprime les lignes de plus de 75 caract�res. (print �quivaur � print $0)
|
||
|
</TD>
|
||
|
</TABLE>
|
||
|
<H2> <A NAME="var_predef"></A>Les variables pr�d�finies </H2>
|
||
|
<TABLE BORDER=1>
|
||
|
<TR>
|
||
|
<TH> Variable </TH>
|
||
|
<TH> Signification </TH>
|
||
|
<TH> Valeur par d�faut </TH>
|
||
|
</TR>
|
||
|
<TR>
|
||
|
<TD> ARGC </TD>
|
||
|
<TD> Nombre d'arguments de la ligne de commande </TD>
|
||
|
<TD> - </TD>
|
||
|
</TR>
|
||
|
<TR>
|
||
|
<TD> ARGV </TD>
|
||
|
<TD> tableau des arguments de la ligne de commnde </TD>
|
||
|
<TD> - </TD>
|
||
|
</TR>
|
||
|
<TR>
|
||
|
<TD> FILENAME </TD>
|
||
|
<TD> nom du fichier sur lequel on applique les commandes </TD>
|
||
|
<TD> - </TD>
|
||
|
</TR>
|
||
|
<TR>
|
||
|
<TD> FNR </TD>
|
||
|
<TD> Nombre d'enregistrements du fichier </TD>
|
||
|
<TD> - </TD>
|
||
|
</TR>
|
||
|
<TR>
|
||
|
<TD> FS </TD>
|
||
|
<TD> separateur de champs en entr�e </TD>
|
||
|
<TD> " " </TD>
|
||
|
</TR>
|
||
|
<TR>
|
||
|
<TD> NF </TD>
|
||
|
<TD> nombre de champs de l'enregistrement courant </TD>
|
||
|
<TD> - </TD>
|
||
|
</TR>
|
||
|
<TR>
|
||
|
<TD> NR </TD>
|
||
|
<TD> nombre d'enregistrements deja lu </TD>
|
||
|
<TD> - </TD>
|
||
|
</TR>
|
||
|
<TR>
|
||
|
<TD> OFMT </TD>
|
||
|
<TD> format de sortie des nombres </TD>
|
||
|
<TD> "%.6g" </TD>
|
||
|
</TR>
|
||
|
<TR>
|
||
|
<TD> OFS </TD>
|
||
|
<TD> separateur de champs pour la sortie </TD>
|
||
|
<TD> " " </TD>
|
||
|
</TR>
|
||
|
<TR>
|
||
|
<TD> ORS </TD>
|
||
|
<TD> separateur d'enregistrement pour la sortie </TD>
|
||
|
<TD> "\n" </TD>
|
||
|
</TR>
|
||
|
<TR>
|
||
|
<TD> RLENGTH </TD>
|
||
|
<TD> longueur de la chaine trouv�e </TD>
|
||
|
<TD> - </TD>
|
||
|
</TR>
|
||
|
<TR>
|
||
|
<TD> RS </TD>
|
||
|
<TD> separateur d'enregistrement en entr�e </TD>
|
||
|
<TD> "\n" </TD>
|
||
|
</TR>
|
||
|
<TR>
|
||
|
<TD> RSTART </TD>
|
||
|
<TD> debut de la chaine trouv�e </TD>
|
||
|
<TD> - </TD>
|
||
|
</TR>
|
||
|
<TR>
|
||
|
<TD> SUBSEP </TD>
|
||
|
<TD> separateur de subscript </TD>
|
||
|
<TD> "\034" </TD>
|
||
|
</TR>
|
||
|
</TABLE>
|
||
|
<H2> <A NAME="motif"></A> Syntaxe du motif </H2>
|
||
|
Si le motif existe dans l'enregistrement, l'action sera appliqu�e � la ligne .
|
||
|
<BR>
|
||
|
Le motif peut etre :
|
||
|
<UL>
|
||
|
<LI> un expression r�guli�re
|
||
|
<UL>
|
||
|
<LI> /expression reguli�re/
|
||
|
<LI> $0 ~ /expression reguli�re/
|
||
|
<LI> expression ~ /expression reguli�re/
|
||
|
<LI> expression !~ /expression reguli�re/
|
||
|
</UL>
|
||
|
<LI> une expression BEGIN ou END
|
||
|
<LI> une expression de comparaison: <, <=, == , !=, >=, >
|
||
|
<LI> une combinaison des trois (� l'aide des op�rateurs bool�ens || <I>ou</I>,
|
||
|
&& <I>et</I>, ! <I>n�gation</I>)
|
||
|
<LI> une caract�risation des lignes <BR>
|
||
|
motif1,motif2 : chaque ligne entre la premiere ligne correspondant au motif1
|
||
|
et la premi�re ligne correspondant au motif2
|
||
|
</UL>
|
||
|
<H3>examples
|
||
|
</H3>
|
||
|
<PRE> awk 'BEGIN { print "Verification des UID et GID dans le fichier /etc/passwd";
|
||
|
FS=":"}
|
||
|
$3 !~ /^[0-9][0-9]*$/ {print "UID erreur ligne "NR" :\n"$0 }
|
||
|
$4 !~ /^[0-9][0-9]*$/ {print "GID erreur ligne "NR" :\n"$0 }
|
||
|
END { print "Fin" }
|
||
|
' /etc/passwd </PRE>
|
||
|
<I> R�sultat :</I><BR>
|
||
|
Verification des UID et GID dans le fichier /etc/passwd<BR>
|
||
|
UID erreur ligne 14 : <BR>
|
||
|
clown:*:aaa:b:utilisateur en erreur:/home/clown:/bin:sh<BR>
|
||
|
GID erreur ligne 14 : <BR>
|
||
|
clown:*:aaa:b:utilisateur en erreur:/home/clown:/bin/sh<BR>
|
||
|
Fin
|
||
|
<P>
|
||
|
<PRE> awk 'BEGIN { print "Verification du fichier /etc/passwd pour ...";
|
||
|
print "- les utilisateurs avec UID = 0 " ;
|
||
|
print "- les utilisateurs avec UID >= 60000" ;
|
||
|
FS=":"}
|
||
|
$3 == 0 { print "UID 0 ligne "NR" :\n"$0 }
|
||
|
$3 >= 60000 { print "UID >= 60000 ligne "NR" :\n"$0 }
|
||
|
END { print "Fin" }
|
||
|
' /etc/passwd </PRE>
|
||
|
<I> R�sultat :</I><BR>
|
||
|
Verification du fichier /etc/passwd pour ...<BR>
|
||
|
- les utilisateurs avec UID = 0 <BR>
|
||
|
- les utilisateurs avec UID >= 60000<BR>
|
||
|
UID 0 ligne 5 : <BR>
|
||
|
root:*:0:b:administrateur:/:/bin/sh<BR>
|
||
|
UID >= 60000 ligne 14 : <BR>
|
||
|
clown:*:61000:b:utilisateur en erreur:/home/clown:/bin/sh<BR>
|
||
|
Fin
|
||
|
<P>
|
||
|
<PRE> awk 'BEGIN { print "Verification du fichier /etc/group";
|
||
|
print "le groupe 20 s'appelle t-il bien users ? " ;
|
||
|
FS=":"}
|
||
|
$1 == "users" && $3 ==20 { print "groupe "$1" a le GID "$3" !" }
|
||
|
END { print "Fin" }
|
||
|
' /etc/group </PRE>
|
||
|
<I> R�sultat :</I><BR>
|
||
|
Verification du fichier /etc/group<BR>
|
||
|
le groupe 20 s'appelle t-il bien users ? <BR>
|
||
|
groupe users a le GID 20 ! <BR>
|
||
|
Fin
|
||
|
<P>
|
||
|
<PRE> awk 'NR == 5 , NR == 10 {print NR" : " $0 }' fichier </PRE>
|
||
|
Imprime de la ligne 5 � la ligne 10 , chaque ligne pr�c�d�e par son num�ro
|
||
|
<P>
|
||
|
<H2> <A NAME="action"></A> Syntaxe de l'action </H2>
|
||
|
Une action transforme ou manipule des donn�es. par d�faut <I>print</I> <BR>
|
||
|
type des actions
|
||
|
<UL>
|
||
|
<LI> fonctions pr�d�finies, numerique ou chaine de caracteres
|
||
|
<LI> controle de flots
|
||
|
<LI> affectation
|
||
|
<LI> impression
|
||
|
</UL>
|
||
|
<H3> <A NAME="fonctions_num"></A> Fonctions num�riques </H3>
|
||
|
<TABLE BORDER=1>
|
||
|
<TR>
|
||
|
<TH> Nom des fonctions </TH>
|
||
|
<TH> signification </TH>
|
||
|
</TR>
|
||
|
<TR>
|
||
|
<TD> atan2(y,x) </TD>
|
||
|
<TD> arctangente de x/y en redians dans l'interval -pi pi</TD>
|
||
|
</TR>
|
||
|
<TR>
|
||
|
<TD> cos(x) </TD>
|
||
|
<TD> cosinus (en radians) </TD>
|
||
|
</TR>
|
||
|
<TR>
|
||
|
<TD> exp(x) </TD>
|
||
|
<TD> exponentielle e � la puissance x</TD>
|
||
|
</TR>
|
||
|
<TR>
|
||
|
<TD> int(x) </TD>
|
||
|
<TD> valeur enti�re </TD>
|
||
|
</TR>
|
||
|
<TR>
|
||
|
<TD> log(x) </TD>
|
||
|
<TD> logarythme naturel </TD>
|
||
|
</TR>
|
||
|
<TR>
|
||
|
<TD> rand() </TD>
|
||
|
<TD> nombre al�atoire entre 0 et 1 </TD>
|
||
|
</TR>
|
||
|
<TR>
|
||
|
<TD> sin(x) </TD>
|
||
|
<TD> sinus (en radians) </TD>
|
||
|
</TR>
|
||
|
<TR>
|
||
|
<TD> sqrt(x) </TD>
|
||
|
<TD> racine carr�e </TD>
|
||
|
</TR>
|
||
|
<TR>
|
||
|
<TD> srand(x) </TD>
|
||
|
<TD> reinitialiser le g�n�rateur de nombre al�atoire </TD>
|
||
|
</TR>
|
||
|
</TABLE>
|
||
|
<H3> <A NAME="char"></A> Les fonctions sur les chaines de caract�res</H3>
|
||
|
Dans le tableau suivant : <BR>
|
||
|
s et t represente des chaines de caract�res <BR>
|
||
|
r une expression r�guli�re <BR>
|
||
|
i et n des entiers
|
||
|
<TABLE BORDER=1>
|
||
|
<TR>
|
||
|
<TH> Nom des fonctions </TH>
|
||
|
<TH> signification </TH>
|
||
|
</TR>
|
||
|
<TR>
|
||
|
<TD> gsub(r,s,t) </TD>
|
||
|
<TD> sur la chaine t, remplace toutes les occurance de r par s </TD>
|
||
|
<TD>
|
||
|
<TR>
|
||
|
<TD> index(s,t) </TD>
|
||
|
<TD> retourne la position la plus � gauche de la chaine t dans la chaine s</TD>
|
||
|
<TD>
|
||
|
<TR>
|
||
|
<TD> length(s) </TD>
|
||
|
<TD> retourne la longueur de la chaine s </TD>
|
||
|
<TD>
|
||
|
<TR>
|
||
|
<TD> match(s,r) </TD>
|
||
|
<TD> retourne l'index ou s correspond � r et positionne RSTART et RLENTH </TD>
|
||
|
<TD>
|
||
|
<TR>
|
||
|
<TD> split(s,a,fs) </TD>
|
||
|
<TD> split s dans le tableau a sur fs, retourne le nombre de champs </TD>
|
||
|
<TD>
|
||
|
<TR>
|
||
|
<TD> sprintf(fmt,liste expressions) </TD>
|
||
|
<TD> retourne la liste des expressions formatt�e suivant fmt </TD>
|
||
|
<TD>
|
||
|
<TR>
|
||
|
<TD> sub(r,s,t) </TD>
|
||
|
<TD> comme gsub, mais remplce uniquement la premi�re occurence </TD>
|
||
|
<TD>
|
||
|
<TR>
|
||
|
<TD> substr(s,i,n) </TD>
|
||
|
<TD> retourne la sous chaine de s commencant en i et de taille n </TD>
|
||
|
<TD>
|
||
|
</TABLE>
|
||
|
<H3> <A NAME="var"></A> Les variables et expressions </H3>
|
||
|
<H4> <A NAME="operations"></A>Les op�rations et affectations arithm�tiques </H4>
|
||
|
<UL>
|
||
|
<LI>Les op�rateurs arithm�tiques sont les op�rations usuelles : + - * / % (reste
|
||
|
division enti�re) et ^ (puissance). Tous les calculs sont effectu�s en virgule
|
||
|
flottante.
|
||
|
<LI> La syntaxe de l'affectation : var = expression <BR>
|
||
|
Vous pouvez aussi utiliser les operateurs +=, -=, *=, /=, %= et ^= (x+=y �quivaut
|
||
|
� x=x+y)
|
||
|
</UL>
|
||
|
<H4> <A NAME="var_champs"></A> Les variables de champs </H4>
|
||
|
<P>Rappel : Les champs de la ligne courant sont : $1, $2, ..., $NF <BR>
|
||
|
La ligne enti�re est $0 <BR>
|
||
|
Ces variables ont les memes propri�t�s que Les autres variables. Elles peuvent
|
||
|
etre reaffect�es. Quand $0 est modifi�es, les variables $1,$2 ... sont aussi
|
||
|
modifi�es ainsi que NF.Inversement si une des variables $i est modifi�es, $0
|
||
|
est mise � jour.<BR>
|
||
|
Les champs peuvent etre specifi�s par des expressions, comme $(NF-1) pour l'avant
|
||
|
dernier champs.<BR>
|
||
|
</P>
|
||
|
<H5>example</H5>
|
||
|
|
||
|
<PRE> awk 'BEGIN { FS=":" ;
|
||
|
OFS=":"}
|
||
|
$NF != "/bin/ksh" { print $0 }
|
||
|
$3 == "/bin/ksh" && NF == 7 { $7 = "/bin/posix/sh" ;
|
||
|
print $0 } '
|
||
|
/etc/passwd > /etc/passwd.new </PRE>
|
||
|
<I> R�sultat :</I><BR>
|
||
|
On cr�e un nouveau fichier de mot de passe /etc/passwd.new en remplacant le shell
|
||
|
/bin/ksh par /bin/posix/sh
|
||
|
<P>
|
||
|
<H4> <A NAME="concat"></A> concat�nation de chaines de caract�res </H4>
|
||
|
<P>Il n'y a pas d'op�rateur de concat�nation, il faut simplement lister les chaines
|
||
|
� concat�ner.<BR>
|
||
|
</P>
|
||
|
<H5>examples:</H5>
|
||
|
|
||
|
<PRE> awk '{ print NR " : " $0 }' fichier</PRE>
|
||
|
<I>R�sultat : </I><BR>
|
||
|
On num�rote les lignes du fichier
|
||
|
<PRE> awk 'BEGIN { FS=":" ;
|
||
|
OFS=":" ;
|
||
|
print " Run Level 2 : Liste des actions "}
|
||
|
$2 ~ /2/ { print "Keyword <<"$3">>, \n Tache <<"$4">>" }
|
||
|
$2 == "" { print "Keyword <<"$3">>, \n Tache <<"$4">>" }
|
||
|
' /etc/inittab > /etc/passwd.new </PRE>
|
||
|
<I> R�sultat :</I><BR>
|
||
|
Affiche les actions execut�es lors du passage � l'�tat 2
|
||
|
<P>
|
||
|
<H3> <A NAME="while"></A> while </H3>
|
||
|
<FONT SIZE=+1><U>Syntaxe:</U> </FONT> while ( condition ) action <BR>
|
||
|
<H3> <A NAME="for"></A> for </H3>
|
||
|
<H3> <A NAME="break"></A> break, continue </H3>
|
||
|
<FONT SIZE=+1><U>Break:</U> </FONT> sortie de boucle<BR>
|
||
|
<FONT SIZE=+1><U>Continue:</U> </FONT>commence une nouvelle it�ration de la boucle.<BR>
|
||
|
<H3> <A NAME="if"></A> if , else </H3>
|
||
|
<FONT SIZE=+1><U>Syntaxe:</U> </FONT> <BR>
|
||
|
if ( expression ) action<BR>
|
||
|
else action<BR>
|
||
|
<H3> <A NAME="comment"></A> commentaire et action vide </H3>
|
||
|
Le commentaire est pr�c�d� par #. tout ce qui est entre # et la fin de la ligne
|
||
|
est ignor� par awk <BR>
|
||
|
Une action vide est repr�sent� par ;
|
||
|
<H3> <A NAME="next"></A> next, exit </H3>
|
||
|
<FONT SIZE=+1><U>Next:</U> </FONT> passe � l'enregistrement suivant. On reprend
|
||
|
le script awk � son d�but<BR>
|
||
|
<FONT SIZE=+1><U>Exit:</U> </FONT>ignore le reste de l'entr�e et execute les actions
|
||
|
d�finie par END <BR>
|
||
|
<H3> <A NAME="affichage"></A> affichage </H3>
|
||
|
<FONT SIZE=+1><U>print exp, exp</U> ou <U> print (exp , exp )</U> </FONT> affiche
|
||
|
les expressions <BR>
|
||
|
<I> print </I> equivaut � <I> print $0 </I> <BR>
|
||
|
<FONT SIZE=+1><U>printf format , exp, exp</U> ou <U> printf (format,exp , exp
|
||
|
)</U> </FONT> identique � print mais en utilisant un format (voir printf en C)
|
||
|
<BR>
|
||
|
Un format est une chaine de caract�res et des constructeurs commencant par % <BR>
|
||
|
<TABLE>
|
||
|
<TR>
|
||
|
<TD> specifieur </TD>
|
||
|
<TD> signification </TD>
|
||
|
</TR>
|
||
|
<TR>
|
||
|
<TD> d </TD>
|
||
|
<TD> nombre decimal </TD>
|
||
|
</TR>
|
||
|
<TR>
|
||
|
<TD> s </TD>
|
||
|
<TD> chaine de caract�res </TD>
|
||
|
</TR>
|
||
|
</TABLE>
|
||
|
<TABLE>
|
||
|
<TR>
|
||
|
<TD> specifieur </TD>
|
||
|
<TD> signification </TD>
|
||
|
</TR>
|
||
|
<TR>
|
||
|
<TD> - </TD>
|
||
|
<TD> expression justifi�e � gauche </TD>
|
||
|
</TR>
|
||
|
<TR>
|
||
|
<TD> largeur </TD>
|
||
|
<TD> largeur d'affichage </TD>
|
||
|
</TR>
|
||
|
<TR>
|
||
|
<TD> .precision </TD>
|
||
|
<TD> longueur maximale d'une chaine de caracteres <BR>
|
||
|
ou nombre de decimales </TD>
|
||
|
</TR>
|
||
|
</TABLE>
|
||
|
<FONT SIZE=+1><U>Example:</U> </FONT><BR>
|
||
|
La sortie d'un print ou d'un printf peut �tre redirig�e dans un fichier ou sur
|
||
|
un pipe<BR>
|
||
|
Les noms de fichiers doivent �tre entre guillemets sinon ils sont consid�r�s comme
|
||
|
des variables <BR>
|
||
|
<FONT SIZE=+1><U>Example:</U> </FONT><BR>
|
||
|
<TABLE>
|
||
|
<TR>
|
||
|
<TD> awk ' { print NR " :" , $0 > "fich.numerote" } ' fichier </TD>
|
||
|
<TD> le fichier <I>fich.numerote</I> contient le fichier <I>fichier</I> avec
|
||
|
les lignes num�rot�es
|
||
|
<P>
|
||
|
</TD>
|
||
|
</TR>
|
||
|
<TR>
|
||
|
<TD> awk ' { printf "%3d : %s " , NR , $0 > "fich.numerote" } ' fichier </TD>
|
||
|
<TD> le fichier <I>fich.numerote</I> contient le fichier <I>fichier</I> avec
|
||
|
les lignes num�rot�es sur 3 caract�res
|
||
|
<P>
|
||
|
</TD>
|
||
|
</TR>
|
||
|
</TABLE>
|
||
|
<H3> <A NAME="tableau"></A> tableau </H3>
|
||
|
On peut utiliser des tableaux de chaines de caract�res et de nombres � une dimension
|
||
|
<BR>
|
||
|
Il n'est pas n�cessaire de les d�clarer. La valeur par d�faut est "" ou 0 .<BR>
|
||
|
Les indices sont des chaines de caract�res.<BR>
|
||
|
<PRE> awk 'BEGIN { print "M�morisation de votre fichier " FILENAME }
|
||
|
{memfile [NR] = $0 }
|
||
|
END { for ( i = NR ; i >= 1 ; i-- ) {
|
||
|
print i ":" memfile[i]
|
||
|
}
|
||
|
print "Fin"
|
||
|
} ' fichier </PRE>
|
||
|
<I> R�sultat :</I><BR>
|
||
|
Affiche le fichier en commencant par la derniere ligne
|
||
|
<P>
|
||
|
<PRE> awk ' NF > 0 {
|
||
|
for (i=1;i<=NF;i++) {
|
||
|
if ( $i ~ /^[0-9a-zA-Z][0-9a-zA-Z]*$/ ) {
|
||
|
index[$i] = index[$i] ";" NR "," i " " ;
|
||
|
index["total"]++ ;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
END { x="total" ;
|
||
|
printf("%s mots detect�s = %d\n",x,index[x]);
|
||
|
} ' fichier </PRE>
|
||
|
<I> R�sultat :</I><BR>
|
||
|
Construction d un index de cross reference
|
||
|
<P>
|
||
|
<H3> <A NAME="for"></A> for et les tableaux</H3>
|
||
|
Comme les indices des tableaux sont des chaines de caract�res, on ne peut pas
|
||
|
determiner la taille d'un tableau <BR>
|
||
|
On doit donc utiliser la construction :
|
||
|
<PRE> for (var in tableau)
|
||
|
action </PRE>
|
||
|
<PRE> awk ' NF > 0 {
|
||
|
for (i=1;i<=NF;i++) {
|
||
|
if ( $i ~ /^[0-9a-zA-Z][0-9a-zA-Z]*$/ ) {
|
||
|
index[$i] = index[$i] ";" NR "," i " " ;
|
||
|
index["total"]++ ;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
END {
|
||
|
for ( x in index ) {
|
||
|
if ( x != "total" )
|
||
|
printf("%-20s\t%s\n",x,index[x]) | "sort -f "
|
||
|
}
|
||
|
x="total";
|
||
|
printf("%s mots detect�s = %d\n",x,index[x]);
|
||
|
} ' fichier </PRE>
|
||
|
<I> R�sultat :</I><BR>
|
||
|
Construction d un index de cross reference
|
||
|
<P>
|
||
|
<H3> <A NAME="tableau_multi"></A> simulations des tableau multidimensions </H3>
|
||
|
On ne peut pas utiliser des tableaux multidimentionnels. <BR>
|
||
|
On peut les simuler en concatenant des composants des sous chaines avec le s�parateur
|
||
|
SUBSEP<BR>
|
||
|
<PRE> awk 'BEGIN { print "M�morisation de votre fichier " FILENAME
|
||
|
SUBSEP=":"
|
||
|
}
|
||
|
{ for ( i=1 ; i <=NF ; i++ ) {
|
||
|
memfields[ NR , i ] = $i
|
||
|
}
|
||
|
}
|
||
|
END { for ( i in memfields ) {
|
||
|
print i ":" memfields[i] | "sort -n -t: "
|
||
|
}
|
||
|
print "Fin"
|
||
|
} ' fichier </PRE>
|
||
|
<I> R�sultat :</I><BR>
|
||
|
Affiche le fichier en commencant par la derniere ligne
|
||
|
<P> </P>
|
||
|
<P></P>
|
||
|
<!-- #EndEditable -->
|
||
|
<HR>
|
||
|
<P class="entete2">
|
||
|
<A HREF="pdf/aide_memoire.html" title="obtenir fichier pdf">Obtenir l'aide m�moire Unix au format pdf</A>
|
||
|
</P>
|
||
|
<div id="conteneur">
|
||
|
<P class="entete1">
|
||
|
<A HREF="index.html" class="case_menu"><IMG SRC="images/home.png" BORDER=1 WIDTH=50 HEIGHT=50 ALT="home www.shellunix.com" title="accueil"></A>
|
||
|
<A HREF="commandes.html" class="case_menu"><IMG SRC="images/cmde.png" BORDER=1 WIDTH=50 HEIGHT=50 ALT="commandes Unix"></A>
|
||
|
<A HREF="sh.html" class="case_menu"><IMG SRC="images/sh.png" BORDER=1 WIDTH=50 HEIGHT=50 ALT="Shell unix: sh"></A>
|
||
|
<A HREF="csh.html" class="case_menu"><IMG SRC="images/csh.png" BORDER=1 WIDTH=50 HEIGHT=50 ALT="Shell unix: csh"></A>
|
||
|
<A HREF="ksh.html" class="case_menu"><IMG SRC="images/ksh.png" BORDER=1 WIDTH=50 HEIGHT=50 ALT="Shell unix: ksh"></A>
|
||
|
<A HREF="regexp.html" class="case_menu"><IMG SRC="images/re.png" BORDER=1 WIDTH=50 HEIGHT=50 ALT="expressions r�guli�res"></A>
|
||
|
<A HREF="sed.html" class="case_menu"><IMG SRC="images/sed.png" BORDER=1 WIDTH=50 HEIGHT=50 ALT="sed"></A>
|
||
|
<A HREF="awk.html" class="case_menu"><IMG SRC="images/awk.png" BORDER=1 WIDTH=50 HEIGHT=50 ALT="awk"></A>
|
||
|
<A HREF="perl.html" class="case_menu"><IMG SRC="images/perl.png" BORDER=1 WIDTH=50 HEIGHT=50 ALT="perl"></A>
|
||
|
</P>
|
||
|
|
||
|
|
||
|
<P id="piedpage"> ©<A HREF="mailto:isa@shellunix.com"> Isabelle Vollant</A>
|
||
|
(<A HREF="http://www.shellunix.com">http://www.shellunix.com</A>) <BR />
|
||
|
<span id="date">mise � jour le 30/07/12</span> </p>
|
||
|
</BODY>
|
||
|
<!-- #EndTemplate --></HTML>
|
||
|
|
||
|
|