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
A voir également:

5 réponses

zipe31 Messages postés 36402 Date d'inscription   Statut Contributeur Dernière intervention   6 431
 
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
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
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
dubcek Messages postés 18789 Date d'inscription   Statut Contributeur Dernière intervention   5 637
 
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

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

Deeper
0