Agregation de données et comptage de lignes

Résolu
deeper -  
 deeper -
Bonjour à tous,

Je coince un peu (carrément en fait) sur le problème suivant :
J'ai un fichier contenant
A;1;C;X;123456
A;1;C;X;234567
A;1;C;Y;345678
A;2;D;X;456789
B;1;D;X;567890
B;1;D;X;567891
B;1;D;X;567892

Et je souhaiterais agreger ces données + compter les lignes sous la forme :
2;A;1;C;X
1;A;1;C;Y
1;A;2;D;X
3;B;1;D;X
la première colonne devenant le comptage des occurrences

Je pense utiliser AWK, mais je ne suis pas un expert sur le sujet.
Faut il parcourir tout le fichier en incrémentant un compteur ou existe t'il une méthode plus simple ?

Est-ce qu'une ame généreuse pourrait éclaire ma lanterne ?

Merci d'avance
Deeper

5 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    $ cat brol 
    A;1;C;X;123456
    A;1;C;X;234567
    A;1;C;Y;345678
    A;2;D;X;456789
    B;1;D;X;567890
    B;1;D;X;567891
    B;1;D;X;567892
    
    $ uniq -c -w7 brol | cut -d';' -f 1-4
          2 A;1;C;X
          1 A;1;C;Y
          1 A;2;D;X
          3 B;1;D;X
    
    $

    1
  2. Utilisateur anonyme
     
    salut,

    Je pense utiliser AWK, mais je ne suis pas un expert sur le sujet.
    Faut il parcourir tout le fichier en incrémentant un compteur [..] ?

    C'est bien ça, tu es sur la bonne piste.
    Continue.
    0
  3. deeper
     
    Cool, merci.
    J'ai pensé à ca du coup :
    awk -F'
    BEGIN {FS=OFS=";"; col1 = 0; col2 = 0; col3 = 0 ; col4 = 0; i = 0;}
    {
            if ($1 == col1)
    			if($2 == col2)
    				if($3 == col3)
    					if($4 == col4)
    						i++
    					else
    						print i";"$1";"$2";"$3";"$4;
    						col4=$4;
    						i=1;
    				else
    					print i";"$1";"$2";"$3";"$4;
    					col3=$3;
    					col4=$4;
    					i=1;
    			else
    				print i";"$1";"$2";"$3";"$4;
    				col2=$2;
    				col3=$3;
    				col4=$4;
    				i=1;
    		else
    			col1=$1;
    			col2=$2;
    			col3=$3;
    			col4=$4;
    			i++;
    			if ( i > 0 );
    				print i";"$1";"$2";"$3";"$4;
    				i=1;
    }
    END {print i";"$1";"$2";"$3";"$4}' monfichier


    Est-ce que ca vous semble cohérent ?
    Merci d'avance.
    0
  4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    $ awk -F ";" '{SUBSEP=FS; t[$1, $2, $3, $4]++} END{for(n in t)print t[n] FS n}' fichier
    1;A;2;D;X
    2;A;1;C;X
    1;A;1;C;Y
    3;B;1;D;X
    $ 
    
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. deeper
     
    E-NO-RME !!!!
    Merci beaucoup zipe31 ça marche parfaitement !!!
    Ca me sauve.

    Deeper
    0