Agregation de données et comptage de lignes

Résolu/Fermé
deeper - 28 févr. 2013 à 11:06
 deeper - 28 févr. 2013 à 12:18
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

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
28 févr. 2013 à 12:08
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
28 févr. 2013 à 11:19
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
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 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
28 févr. 2013 à 11:54
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
E-NO-RME !!!!
Merci beaucoup zipe31 ça marche parfaitement !!!
Ca me sauve.

Deeper
0