OVH Cloud OVH Cloud

selectionner les lignes d'un fichier contenant des maximums

33 réponses
Avatar
geo cherchetout
Bonjour,
J'ai un fichier texte dont chaque ligne contient, après un premier
nombre et une espace, un second nombre compris entre 0 et 1. En voici un
extrait :

0.0023129252 0.68157959
0.0023356009 0.68902588
0.0023582766 0.71615601
0.0023809524 0.72515869 <--
0.0024036281 0.71878052
0.0024263039 0.72677612 <==
0.0024489796 0.71615601
0.0024716553 0.70773315
0.0024943311 0.68917847

Ce second nombre représentant lui-même des échantillons d'une onde
sonore de composition spectrale très pauvre, passe toutes les 50 à 200
lignes par un vrai maximum comme celui de la ligne 6. Deux maximums
successifs sont séparés par un minimum dont la valeur est au moins 10
fois plus faible, ce qui permet de les distinguer de quelques faux
maximums comme celui de la ligne 4.
Je voudrais écrire un script dont l'exécution réduise ce fichier aux
seules lignes contenant ces vrais maximums. Quelles commandes ou quel
langage de programmation, et donc quelles pages de manuel me conseillez
vous, sachant que mes connaissances sont des plus modestes ?
Merci d'avance.

3 réponses

1 2 3 4
Avatar
Stephane Chazelas
2004-11-28, 23:16(+01), geo cherchetout:
Le 28.11.2004 13:42, *Stephane Chazelas* a écrit fort à propos :

Pour le probleme de "geo cherchetout", awk est *l*'outil qui
s'impose si on ne connait pas perl. La page de man de awk (pas
celle de gawk) est courte et limpide et on peut faire quelque
chose avec en moins d'une heure.


Awk et son manuel ne semblent pas être des produits libres ?


La specification POSIX de awk est accessible gratuitement. Elle
est basée sur la "nouvelle" version de awk (1988).

http://www.opengroup.org/onlinepubs/009695399/utilities/awk.html

Si on s'en tient a ce manuel, on peut ecrire des scripts awk qui
marcheront sur tous les systemes Unix (avec des precautions
toutefois, comme passer les options de compatibilité a gawk et
utiliser /usr/xpg4/bin/awk sous Solaris (/bin/awk est encore le
vieux awk sous Solaris).

Quant au code de awk (nawk), il a ete /relaché/ par Caldera
(http://unixtools.sourceforge.net/), on peut donc trouver des
ports pour Linux librement (par exemple:
http://heirloom.sourceforge.net/)

Mais il a existé toute une floppée d'implementations libres.

--
Stephane


Avatar
Stephane Chazelas
2004-11-28, 16:15(+01), drkm:
Stephane Chazelas writes:

Je suis d'accord pour dire que peut valoir le coup d'apprendre
perl (si on est amené souvent a avoir a resoudre rapidement ce
genre de problemes), mais c'est une tache d'une toute autre
envergure que de lire la page de man de awk.


Et pour une introduction un peu plus détaillée, que conseilles-tu ?
Le livre de Kernighan et Weinberger ? Le « sed et awk » de chez
O'Reilly ?


Il parait que sed et awk est pas mal. Maintenant, la page de man
devrait suffire il me semble (elle est peut-etre meilleure sous
d'autres systemes comme Solaris) et tu dois pouvoir trouver des
manuels plus detaillés en ligne. Pour moi, un manuel pour awk ne
se justifie pas.

Et puisque les différences de gawk avec AWK ont été évoquées,
quelles sont-elles, principalement ?


De nombreuses extensions, souvent utiles, pas toujours tres bien
pensees.

Un grand avantage (qui peut des fois tourner en inconvenient
comme lenteur et bouffage de resource) est l'abscense de
limites.

--
Stephane


Avatar
Jérémy JUST
On Mon, 29 Nov 2004 11:16:08 +0000
Stephane Chazelas wrote:

Pour moi, un manuel pour awk ne se justifie pas.


Disons que si le manuel devient justifié, c'est qu'il est temps de
passer à Perl. ;)

--
Jérémy JUST

1 2 3 4