extraction en awk

Mise à jour: 2 fevrier 2008
Version: 1.0
Author: Jean-Louis Bicquelet-Salaün
Location: http://jlbicquelet.free.fr
Copyright: (c) 2008 Jean-Louis BICQUELET-SALAÜN

Extraction de données avec AWK

On pense souvent à utiliser awk pour extraire et manier les colonnes de mots séparer par des espaces ou des caractères.

On pense moins souvent à extraire des colonnes de caractères. L'exemple suivant regarde si le 10 eme caractère de la ligne est égal à 1 et si le 11 eme vaut 5 ou 6.

Dans ce cas, il affiche le ligne en question.

fichier extract.awk

#!/bin/awk -f
{
  c1=substr($0,10,1);
  c2=substr($0,11,1);
  if ( c1 == "1"  && ( c2 == "5" || c2 == "6" ))
  {
    print $0;
  }
}

Voici un petit fichier de test:

fichier test.dat

01234567890123456
aaaaaaaaa15aaaaaa
bbbbbbbbbbbbbbbbb
ccccccccc16cccccc
ddddddddd1ddddddd
eeeeeeeeee6eeeeee

On lance le programme sur le fichier de test:

#extract.awk test.dat
aaaaaaaaa15aaaaaa
ccccccccc16cccccc

Le plus étonnant , c'est que ce script est plutot performant. Un test d'extraction pour un meme fichier, montre que le script awk met 172s contre 32s pour le c.

Pourquoi se priver de awk alors?