Awk one liner collection

Creation: 16 novembre 2006
Mise à jour: 30 aout 2010
Version: 1.1
Author: Jean-Louis Bicquelet-Salaün
Location: http://jlbicquelet.free.fr
Copyright: (c) 2004-2010 Jean-Louis BICQUELET

Awk one liner mémo

Voici un memo des expression awk permettant des traitements en une ligne. C'est là que l'on voit toute la puissance de awk!

Le fichier d'exemple est fichier:

1 2 3
4 5 6

Le fichier de texte est texte:

le chat est parti le matin.
Il avait du lait dans sa gamelle.

fichier entier

  1. Pour faire la somme des valeurs des lignes
    6
    15
    

  2. Pour faire la somme de toutes les lignes
    21
    

  3. Pour connaitre le nombre de champs
    6
    

  4. Pour convertir un fichier msdos sous unix
     

traitement des colonnes

  1. Pour afficher la dernière colonne
    3
    6
    

  2. Pour détruire une colonne (ici la deuxième):
     
  3. Pour extraire des colones
    awk '{print $2,$3}' fichier
    2 3
    5 6
    

  4. Pour faire la somme d'une colonne
    total: 7
    

  5. Pour afficher les fichiers qui appartiennent à l'utilisateur root ou jlb:
    ls -l | awk '$3 == "jlb" || $3 == "root" { print $9}'
    

  6. Pour afficher les fichiers qui appartiennent à l'utilisateur jlb qui font plus d'1 Ko:
    ls –al |awk ‘$3 == "jlb" && $5 > 1024 {print $9}’
    

  7. Pour afficher les fichiers qui n'appartiennent pas à l'utilisateur oracle:
    ls –al |awk ‘$3 != "oracle" {print $9}’
    

  8. Pour trouver le min et le max de la première colonne
    
    Max = 4    Min = 1
    

  9. Pour afficher une colone donnée en fonction d'un critère avec | comme délémiteur:
    
    

substitutions / extractions

  1. Pour insérer une chaine en début de chaque ligne du fichier
    awk '{sub(/^/,"rm ");print}' fichier
    

  2. Pour substituer une chaine par une autre : gsub pour toutes les occurances, sub pour la première:
    X chat est parti le matin.
    Il avait du lait dans sa gamelle.
    root@hercule:/root #awk '{gsub(/le /,"X ");print}' texte
    X chat est parti X matin.
    Il avait du lait dans sa gamelle.
    

  3. Pour afficher une ligne donnée
    Il avait du lait dans sa gamelle.
    

  4. Pour afficher une section entre deux lignes
     
  5. Pour afficher la première ligne d'un fichier
     
  6. Pour afficher une section entre deux expression régulières
     awk '/begin/,/end/'
    

emulation de commmandes UNIX

  1. Pour émuler la commande uniq :
     awk 'a !~ $0; {a=$0}'
    

  2. Pour émuler la commande head :
    le chat est parti le matin.
    

  3. Pour émuler la commande grep :
    le chat est parti le matin.
    

  4. Pour émuler la commande grep -v:
    Il avait du lait dans sa gamelle.
    

  5. Pour émuler la commande wc -l:
    $awk ‘ END {print NR}’
    

  6. Pour émuler la commande grep avec des and:
     
  7. Pour émuler la commande seq :
    
     for i in `echo | awk '{ for (i=1;i<10;i++){ print i}}'`
             do
                    echo $i
                    done
    

shell extension

  1. Comment effectuer une opération arithmétique avec awk
    echo | awk -v x=$a -v y=3 '{ print x/y}'
    0.666667
    

  2. Comment tirer un nombre aléatoirement entre 1 et 6:
    echo | awk '{srand() ; print int(6*rand()+1)}'
    

  3. Comment splitter les lignes d'un fichier:
    cat /etc/passwd | awk '{ split($1,t,":"); print t[1],t[2]}'
    

  4. Comment afficher en couleur un texte
    awk -v a="\033[1;31m " 'BEGIN {print a "rouge"}'
    

  5. Comment lancer une commande à partir de awk
    echo | awk '{ system("ls") }'
    

  6. Une autre manière de faire en passant par une variable awk intermédiaire.

    awk 'BEGIN { resultat= system ("ls | grep ksh")
           echo resultat
           }'
    

commandes magiques

  1. Pour renommer tous les fichiers en .Old:
    ls *.l | awk '{print "mv "$1" "$1".old"}' | sh
    

  2. Pour connaitre la taille totale occupée par les disques
    /1024 " Mb"}'
    taille total: 2783.14 Mb
    

  3. Pour afficher le plus gros fichiers des sous répertoire courrants et sa taille:
    3423065 hercule_061115_0000.nmon.csv
    

  4. Pour afficher un nombre entier
    cat lsfs | awk '{sum +=$5} END {printf "%.f\n",sum}'