[gull] SED, d?tecter un changement de contexte sur fichier CSV

Daniel Cordey dc at mjt.ch
Fri Oct 24 10:26:17 CEST 2008


On Thursday 23 October 2008, Frédéric Benninger wrote:

> La dernière colonne représente des valeurs de mesures, et l'avant
> dernière est un flag qui me signale que les mesures sont stables.
> Je désire garder dans le fichier debut.csv la ligne qui correspond à un
> changement de mode instable -> stable.
>
> Et dans fin.csv la dernière ligne qui précède le mode instable ou la
> dernière ligne du fichier si on est en mode stable.

Bon, je comprends mieux. Voici une version "compressee" et donc lisible en awk 
(je n'ai volontairement pas simplifie !). Bien sur, il est possible de faire 
la meme chose en Python, Perl, bash, php... A toi de voir... On ne peut 
utiliser que de commandes du style 'sed' uniquement car il y a un petit besoin 
d'effectuer des tests... donc il faut un "langage" qui offre la possibilite de 
definir une algorithme.

A executer tel que :

	awk -f filter.cmd <Data.csv

dc


--- filter.cmd ---

BEGIN {
    stable = "0";
    FS = ";";
    line = ""
}

{ 
    if ($2 != stable)
    {
        if ($2 == "1")
            printf "%s;%s;%s\n", $1, $2, $3 >>"debut.csv"
        else
            if ($2 == "0")
                printf line >>"fin.csv"
    }

    if (length($1))
    {
        line = sprintf("%s;%s;%s\n", $1, $2, $3)
        stable = $2;
    }
}
END {
    if (stable == "1")
        printf line >>"fin.csv";
}
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://forum.linux-gull.ch/pipermail/gull/attachments/20081024/ec853d13/attachment.htm>


More information about the gull mailing list