Awk Quicksheet et memo

Creation: 19 mai 2014
Mise à jour:
Version: 1.1
Author: Jean-Louis Bicquelet-Salaün
Location: http://jlbicquelet.free.fr
Copyright: (c) 2014 Jean-Louis BICQUELET

Awk exemples simples et cours

Awk est un langage puissant. Il est par contre difficile à maintriser et à retenir. J'avais déjà fait une page sur le sujet. J'ai décidé d'en refaire une sous forme de quicksheet, organisée sous forme de catégorie, pour faciliter la recherche d'exemples.

manipulation de chaines

mise en minuscule <commande> | awk '{ print tolower ($0) }'
mise en majuscule <commande> | awk '{ print toupper ($0) }'
substitution de chaine <commande> | awk '{ gsub(/ABC/, "XYZ"); print '
affiche le dernier caractère <commande> | awk '{print substr($1,length($1),1)}
Mise en forme de timestamp errpt |grep hdisk21 | awk '{ printf ("%s:%s\n",substr($2,5,2),substr($2,7,2)) }'
substitution de tous les patterns awk '{ gsub(/Britain/, "United Kingdom"); print '

Exemples

echo "toto" |awk '{ print tolower ($0) }'
toto
#echo "toto" |awk '{ print toupper ($0) }'
TOTO
errpt | awk 'NR==1, NR==10'
IDENTIFIER TIMESTAMP  T C RESOURCE_NAME  DESCRIPTION
DCB47997   0402112514 T H hdisk10        DISK OPERATION ERROR
DCB47997   0402073514 T H hdisk21        DISK OPERATION ERROR
DCB47997   0402072314 T H hdisk11        DISK OPERATION ERROR
DCB47997   0401172714 T H hdisk11        DISK OPERATION ERROR
DCB47997   0401160714 T H hdisk11        DISK OPERATION ERROR
DCB47997   0401155614 T H hdisk11        DISK OPERATION ERROR
DCB47997   0401013414 T H hdisk12        DISK OPERATION ERROR
DCB47997   0331175814 T H hdisk8         DISK OPERATION ERROR
DCB47997   0331172614 T H hdisk8         DISK OPERATION ERROR

manipulation de fichier

grep <commande> | awk '/string/'
wc -l <commande> | awk 'END{print NR}'
head <commande> | awk 'NR==1, NR==20'
tail <commande> | awk 'NR==1, NR==20'
selectionner une ligne <commande> | awk 'NR==13'
selection d'un paragraphe <commande> | awk '/BEGIN/,/END/'
afficher le nombre de caracteres par ligne <commande> |awk '{print length}'
afficher les lignes de plus de 80 caractères <commande> | awk 'length > 80 {printf "%3d. %s\n", NR, $0}'
compte le nombre de lignes blanches <commande> | awk '/^$/ {x++} END {print x}'

exemple:

Pour afficher les ligne 1 et 3:
#errpt |awk 'NR==1 , NR==3' 
IDENTIFIER TIMESTAMP  T C RESOURCE_NAME  DESCRIPTION 
A6DF45AA   0401220014 I O RMCdaemon      The daemon is started. 
A924A5FC   0401215814 P S SYSPROC        SOFTWARE PROGRAM ABNORMALLY TERMINATED

colonnes

affiche dans l'ordre inverse <commande> | awk '{ for (i = NF; i > 0; --i) print $i }'
spliter une ligne echo "12:23:11" | awk '{split($0,a,":"); print a[3] a[2] a[1]}'

programmation

exemple:

Afficher les caractères de 32 à 127:
awk 'END{for (i=32; i<127; i++)            \
                   printf "%3d %3o %c\n", i,i,i  \
              }' < /dev/null