Agregation de données et comptage de lignes [Résolu/Fermé]

Signaler
-
 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

Messages postés
36272
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
20 janvier 2021
5 852
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 63550 internautes nous ont dit merci ce mois-ci


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.
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.
Messages postés
18240
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
30 novembre 2020
5 159
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
$ 
E-NO-RME !!!!
Merci beaucoup zipe31 ça marche parfaitement !!!
Ca me sauve.

Deeper