User Tools

Site Tools


informatique:linux:awk

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
Next revisionBoth sides next revision
informatique:linux:awk [2015/08/28 08:52] – [Les fonctions texte] pteuinformatique:linux:awk [2019/06/06 07:26] pteu
Line 97: Line 97:
 dude                 a dude dude                 a dude
 robert               le gros robert robert               le gros robert
 +
 +# puisque l'affichage est par colonne, on va afficher les noms pour être plus parlant
 +# on utilise l'instruction BEGIN qui, comme on l'a vu, ne s'exécute qu'une fois en début de script
 +awk -F: 'BEGIN {printf "%-20s %s\n", "login:","description:"} $7 ~ /\/bin\/bash/ {printf "%-20s %s\n", $1, $5}' /etc/passwd
 +login:               description:
 +root                 root
 +dude                 a dude
 +robert               le gros robert
 +
 +# on peut même définir un format d'affichage pour ne pas avoir a le retaper à chaque printf :
 +awk -F: 'BEGIN {format = "%-20s %s\n"; printf format, "login:","description:"; printf format, "---","---"} $7 ~ /\/bin\/bash/ {printf format, $1, $5}' /etc/passwd
 +login:               description:
 +---                  ---
 +root                 root
 +dude                 a dude
 +robert               le gros robert
 +
 +# la même commande, en plus lisible :
 +awk -F: 'BEGIN {format = "%-10s %s\n"
 + printf format, "login:","description:"
 + printf format, "---","---"}
 + $7 ~ /\/bin\/bash/ {printf format, $1, $5}' /etc/passwd
 </code> </code>
 +
 ====Les fonctions mathématiques==== ====Les fonctions mathématiques====
  
Line 105: Line 128:
  
   * imprime chaque ligne du fichier /etc/passwd après avoir effacé le deuxième champs   * imprime chaque ligne du fichier /etc/passwd après avoir effacé le deuxième champs
-<code>+<code bash>
 awk -F ":" '{ $2 = "" ; print $0 }' /etc/passwd awk -F ":" '{ $2 = "" ; print $0 }' /etc/passwd
 </code> </code>
  
   * imprime le nombre total de lignes du fichiers   * imprime le nombre total de lignes du fichiers
-<code>+<code bash>
 awk 'END {print NR}' /etc/passwd awk 'END {print NR}' /etc/passwd
 </code> </code>
  
   * lire la 3ème ligne d'un fichier :   * lire la 3ème ligne d'un fichier :
-<code>+<code bash>
 awk '{if (NR==3) print}' <fichier> awk '{if (NR==3) print}' <fichier>
 </code> </code>
  
   * imprime le dernier champs de chaque ligne   * imprime le dernier champs de chaque ligne
-<code>+<code bash>
 awk '{print $NF}' /etc/passwd awk '{print $NF}' /etc/passwd
 </code> </code>
  
   * imprime le login et le temps de connexion.   * imprime le login et le temps de connexion.
-<code>+<code bash>
 who | awk '{print $1,$5}' who | awk '{print $1,$5}'
 </code> </code>
  
   * imprime les lignes de plus de 75 caractères. (''print'' équivaut à ''print $0'')   * imprime les lignes de plus de 75 caractères. (''print'' équivaut à ''print $0'')
-<code>+<code bash>
 awk 'length($0)>75 {print}' /etc/passwd awk 'length($0)>75 {print}' /etc/passwd
 </code> </code>
  
   * tests sur le fichier /etc/passwd :   * tests sur le fichier /etc/passwd :
-<code>+<code bash>
 awk 'BEGIN { print "Verification du fichier /etc/passwd pour ..."; awk 'BEGIN { print "Verification du fichier /etc/passwd pour ...";
             print "- les utilisateurs avec UID = 0 " ;             print "- les utilisateurs avec UID = 0 " ;
Line 147: Line 170:
  
   * supprimer le suffixe du domaine d'un nom de machine :   * supprimer le suffixe du domaine d'un nom de machine :
-<code>+<code bash>
 echo "toto.domaine.fr est un nom trop long !" | awk 'gsub(/\..*$/,"",$1) {print "machine="$1}' echo "toto.domaine.fr est un nom trop long !" | awk 'gsub(/\..*$/,"",$1) {print "machine="$1}'
 </code> </code>
  
 +  * afficher les blocs de texte du fichier FIC.txt compris entre les balises BEGIN et END :
 +<code bash>
 +awk '/BEGIN/,/END/' FILE.txt
 +</code> 
 +
 +  * supprimer (ne pas afficher) les doublons de lignes dans un fichier :
 +<code bash>
 +awk '!x[$0]++' test.tmp
 +</code>
 +
 +  * quitter la boucle awk après le premier match
 +<code bash>
 +echo -e "toto\ntoto\n" | awk '/toto/ {print; exit}'
 + toto
 +</code>
informatique/linux/awk.txt · Last modified: 2022/04/13 13:03 by pteu