[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