Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 29/07/2011, 19h36   #1
Futur Membre du Club
 
Inscription : août 2007
Messages : 77
Détails du profil
Informations forums :
Inscription : août 2007
Messages : 77
Points : 15
Points : 15
Par défaut awk avec fonction min et max

Bonjour,
j'ai déjà réalisé le tri sur les colonnes 1 et 2
Je cherche à récupérer pour chacun de mes élements le max et min

fichier:
20 22 element1
25 29 element1
38 70 element1
10 22 element2
15 19 element2
28 30 element2


je suis partie sur l'utlisation de la fonction min et max de awk, mais je coince

20 70 element1
10 30 element2
pontarose est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2011, 04h01   #2
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 071
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 071
Points : 4 154
Points : 4 154
Bonjour,

fonctions min/max ?

J'utiliserais un tableau associatif, qui prendrait en index le troisième champ de ton exemple.
s'il existe je comparerais chaque valeur à $1 et $2, et si l'un des deux est différent, alors je mettrais à jour le tableau pour cet index...
N_BaH est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 31/07/2011, 19h53   #3
Expert Confirmé Sénior
 
Avatar de Sve@r
 
Homme Frédéric
Ingénieur développement logiciels
Inscription : février 2006
Messages : 3 055
Détails du profil
Informations personnelles :
Nom : Homme Frédéric
Âge : 44
Localisation : France, Oise (Picardie)

Informations professionnelles :
Activité : Ingénieur développement logiciels
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : février 2006
Messages : 3 055
Points : 4 934
Points : 4 934
Salut
Le problème de awk c'est qu'il ne traite qu'une ligne à la fois. Et toi, tu as besoin non seulement de mémoriser les informations passées mais en plus mémoriser autant d'info que d'élément.

En me basant sur ton exemple (c.a.d. avoir les éléments de même nature regroupés ensemble), ce script shell donne le min et le max pour chaque élément. Il traite chaque ligne et dès que l'élément change, affiche le résultat de l'élément précédent.
Code bash :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/bash
 
(
    cat fichier
    echo "0 0 _EOF_"
) |while read ligne
do
    val1=$(echo $ligne |cut -f1 -d' ')
    val2=$(echo $ligne |cut -f2 -d' ')
    elem=$(echo $ligne |cut -f3 -d' ')
 
    if test "$mem_elem" != "$elem"
    then
        test -n "$mem_elem" && echo "$min $max $mem_elem"
 
        mem_elem="$elem"
        min="$val1"
        max="$val2"
    else
        test $val1 -lt $min && min=$val1
        test $val2 -gt $max && max=$val2
    fi
done
__________________
Vous ne pouvez pas apporter la prospérité au pauvre en la retirant au riche.
Tout ce qu'un individu reçoit sans rien faire pour l'obtenir, un autre individu a dû travailler pour le produire sans en tirer profit.
Tout Pouvoir ne peut distribuer aux uns que ce qu'il a préalablement confisqué à d'autres car on n'accroît pas les biens en les divisant.
Quand la moitié d'un peuple croit qu'il ne sert à rien de faire des efforts car l'autre moitié les fera pour elle, et quand cette dernière moitié se dit qu'il ne sert à rien d'en faire car ils bénéficieront à d'autres, cela s'appelle le déclin et la fin d'une nation.
Dr. Adrian Rogers, 1931
Sve@r est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 13h29.


 
 
 
 
Partenaires

Hébergement Web