IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Recherche Min par rapport à une colonne - awk


Sujet :

Linux

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut Recherche Min par rapport à une colonne - awk
    Bonjour à tous,

    Voici mon petit soucis:

    J'ai un fichier en entrée de type:

    A,12.01.2000,456
    A,12.01.2002,454
    A,12.01.2003,455
    B,12.01.2004,457
    B,12.01.2005,486
    B,12.01.2006,486
    B,12.01.2007,486

    J'aimerai faire un script awk qui m'écrive dans un autre fichier la ligne pour A ayant la date minimum, pour B de même etc...
    En l'occurence, ici, le second fichier devra contenir :

    A,12.01.2000,456
    B,12.01.2004,457

    J'ai compris comment faire le min d'un fichier mais comment peut on rechercher le min pour A, B etc...

    Merci à tous

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 250
    Points : 259
    Points
    259
    Par défaut
    Si tu as déjà réussi à trouver le minimum sans les lettres, ce sera assez simple d'extrapoler.
    Si la ligne commence par A, tu mets à jour la variable qui contient le min pour les lignes de A.
    Si la ligne commence par B, tu mets à jour la variable qui contient le min pour les lignes de B.
    Ou alors tu utilises un tableau associatif pour stocker les valeurs.

    /^A/ { ...; min_A = truc; tab["A"] = truc; ....}
    /^B/ { ...; min_B = machin; tab["B"] = machin; ....}

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    Le problème est que je ne connais pas à l'avance les valeurs de la 1ere colonne.

  4. #4
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 250
    Points : 259
    Points
    259
    Par défaut
    Citation Envoyé par samiy Voir le message
    Le problème est que je ne connais pas à l'avance les valeurs de la 1ere colonne.
    C'est pas grave ca. Pour toutes lignes, il suffit de recuperer la premiere lettre ou premiere colonne dans une variable qui deviendra la clef de ton tableau associatif.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Février 2008
    Messages : 3
    Points : 1
    Points
    1
    Par défaut
    aurais-tu un exemple parce que là je ne vois pas du tout :o(

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 250
    Points : 259
    Points
    259
    Par défaut
    Citation Envoyé par samiy Voir le message
    aurais-tu un exemple parce que là je ne vois pas du tout :o(
    D'après l'exemple, j'ai suppose que la virgule sépare les champs. Et que chaque ligne commence par une lettre majuscule. J'utilise un tableau pour stocker la date et un autre pour stocker les valeurs (455, 456, etc.). Et je sauvegarde la date sous un format plus simple a comparer.
    En espérant que ça serve ;-)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    BEGIN {
    	## field separator
    	FS = ",";	
     
    	tab_date[""] = 0;
    	tab_valeur[""] = 0;
    }
     
     
    $1 ~/^[A-Z]$/ {
    	# on traite les lignes commencant par une lettre majuscule
    	clef = $1;
    	valeur = $3;
    	## format JJ.MM.AAAA
    	date1 = $2; 
    	split(date1,array,/\./);
    	jour = array[1];
    	mois = array[2];
    	annee = array[3];
    	## format AAAAMMJJ plus facile pour comparer deux dates
    	date2 = annee "" mois "" jour; 
    	if ((date2 < tab_date[clef] && tab_date[clef] != "") || (tab_date[clef] == "")) {
    		tab_date[clef] = date2;
    		tab_valeur[clef] = $3;	
    	} 
    }
     
     
     
    END {
    	for (cle in tab_date) {
    		if (cle != "") {
    			annee = substr(tab_date[cle],1,4);
    			mois = substr(tab_date[cle],5,2);
    			jour = substr(tab_date[cle],7,2);
    			date1 = jour "." mois "." annee;
    			print cle "," date1 "," tab_valeur[cle];	
    		}
    	}
    }

Discussions similaires

  1. Contrôle de cellules par rapport à une colonne
    Par wilcamp1 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 10/01/2014, 22h24
  2. un compteur automatique par rapport à une colonne
    Par sinoun dans le forum Développement de jobs
    Réponses: 2
    Dernier message: 27/07/2012, 13h54
  3. TOP : Statistiques simple par rapport à une colonne
    Par haskouse dans le forum Autres outils
    Réponses: 0
    Dernier message: 09/02/2012, 17h25
  4. tri matrice par rapport à une colonne
    Par Amergin dans le forum Caml
    Réponses: 4
    Dernier message: 30/09/2009, 14h59
  5. Réponses: 1
    Dernier message: 19/03/2009, 14h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo