Agregation de données et comptage de lignes

Résolu
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. Contributeur
    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
    1. 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
      1. 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
        1. 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
          1. E-NO-RME !!!!
            Merci beaucoup zipe31 ça marche parfaitement !!!
            Ca me sauve.

            Deeper
            0