Logo Khaganat

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Les deux révisions précédentesRévision précédente
Prochaine révision
Révision précédente
Prochaine révisionLes deux révisions suivantes
fr:bestpractices [2018/03/28 16:27] – /* tr */ merlin8282fr:bestpractices [2018/03/28 17:16] – [awk] /* étoffe de l'intro */ merlin8282
Ligne 154: Ligne 154:
   19 20 21 22 23 24 25     19 20 21 22 23 24 25  
   26 27 28 29 30 31   26 27 28 29 30 31
 +  
   $ cal dec 9999   $ cal dec 9999
      December 9999            December 9999      
Ligne 192: Ligne 193:
  
 Remplacer les caractères 'a' et 'c' par 'x' et 'v'. N'y ayant pas d'autres caractère à "matcher" (le premier paramètre à la commande ''tr''), 'p' et 'b' n'ont ici aucun intérêt et peuvent être omis / n'ont aucune incidence. Remplacer les caractères 'a' et 'c' par 'x' et 'v'. N'y ayant pas d'autres caractère à "matcher" (le premier paramètre à la commande ''tr''), 'p' et 'b' n'ont ici aucun intérêt et peuvent être omis / n'ont aucune incidence.
 +
 +
 +==== awk ====
 +''awk'' est plus qu'une "simple" commande, c'est un langage de programmation permettant notamment de manipuler des chaînes de caractères. Ici nous n'allons voir que des exemples en ligne de commande, bien qu'il soit tout à fait possible d'écrire des programmes plus gros en awk, à la même manière que les scripts shell. Couramment ces petits "mini-programmes" en ligne de commandes sont appelés des ''oneliners'', du fait qu'ils tiennent sur une seule ligne.
 +
 +Voici quelques exemples, qui sont loin d'être exhaustifs quant à ce qu'il est possible de faire avec awk. Cela dit, ils donneront déjà un petit aperçu.
 +
 +  $ sentence="year-month-day hours:minutes:seconds :ms \"this is a comment\""
 +  $ printf "%s\n" "$sentence" | awk '{print $1}'
 +  year-month-day
 +
 +Cela affiche le premier élément de la phrase, les éléments étant (par défaut) les chaînes de caractères séparées par une espace.
 +
 +  $ printf "%s\n" "$sentence" | awk '{print $NF}'
 +  comment"
 +
 +''$NF'' est une variable spéciale pointant vers le dernier élément.
 +
 +  $ printf "%s\n" "$sentence" | awk 'BEGIN{FS = "\""} {print $(NF-1)}'
 +  this is a comment
 +
 +Ici on redéfinit le séparateur, qui est par défaut l'espace, pour utiliser à la place le caractère ''"''. On dit à awk d'afficher l'avant-dernier (''$(NF-1)'') élément.
 +
 +
 +  $ printf "%s\n" "$sentence" | awk 'BEGIN{FS = " :"} {print $2}'
 +  ms "this is a comment"
 +
 +Redéfinition du séparateur à '' :'' (espace + double-point), et affichage du second élément.
 +
 +  $ printf "%s\n" "$sentence" | awk '/minutes/ {print $0}'
 +  year-month-day hours:minutes:seconds :ms "this is a comment"
 +
 +On peut aussi matcher des expressions rationnelles avec ''awk''. Ici, toutes les lignes contenant le mot ''minutes'' seront affichées, ''$0'' représentant la ligne entière.
 +
 +  $ printf "%s\n" "$sentence" | awk '/minutes/ {print $3}'
 +  :ms
 +
 +On peut aussi n'afficher que le troisième élément des lignes contenant le mot ''minutes''.
 +
 +  $ lines="$(echo "line1 line2 line3" | tr " " "\n")"
 +  $ printf "%s\n" "$lines" | awk '$1 ~ /line2/ {print $0}'
 +  line2
 +
 +On peut dire à awk de ne chercher une chaîne correspondante que dans un seul élément ; ici on cherche ''line2'' dans le premier élément de chaque ligne.
 +
 +  $ printf "%s\n" "$lines" | awk '/line2/ {print $0}'
 +  line2
 +
 +Cela revient au final à la même chose que ci-dessus, étant donné que l'on n'a qu'un seul élément par ligne.
 +
 +  $ printf "%s\n" "$lines" | awk '/line/ {print $0}'
 +  line1
 +  line2
 +  line3
 +
 +On matche ''line'', donc toutes les trois lignes sont affichées.
 +
 +  $ printf "%s\n" "$lines" | awk '/e3/ {print $0}'
 +  line3
 +
 +Eh oui, seul ''e3'' est matché.
 +
  
  
CC Attribution-Share Alike 4.0 International Driven by DokuWiki
fr/bestpractices.txt · Dernière modification : 2021/12/03 19:19 de 127.0.0.1

Licences Mentions légales Accueil du site Contact