Faire une somme ligne par ligne et par date de deux fichiers
Résolu/Fermé
pcsystemd
Messages postés
691
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
15 janvier 2024
-
11 mars 2015 à 09:18
dubcek Messages postés 18717 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 16 mars 2024 - 12 mars 2015 à 10:04
dubcek Messages postés 18717 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 16 mars 2024 - 12 mars 2015 à 10:04
A voir également:
- Faire une somme ligne par ligne et par date de deux fichiers
- Hors ligne instagram - Guide
- Site de vente en ligne particulier - Guide
- Aller à la ligne excel - Guide
- Partage de photos en ligne - Guide
- Apparaitre hors ligne whatsapp - Guide
11 réponses
dubcek
Messages postés
18717
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
16 mars 2024
5 613
Modifié par dubcek le 11/03/2015 à 10:19
Modifié par dubcek le 11/03/2015 à 10:19
hello
$ awk -F ";" '{t1[$3]+=$1; t2[$3]+=$2} END {for (n in t1)print t1[n] FS t2[n] FS n}' fichier1 fichier2 | sort -t ";" -k 3.4,3.7 -k 3.1,3.2
51;29;01/2010
73;47;02/2010
88;58;03/2010
76;132;04/2010
58;108;01/2011
116;162;02/2011
pcsystemd
Messages postés
691
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
15 janvier 2024
22
11 mars 2015 à 10:14
11 mars 2015 à 10:14
Merci dubcek.
J'utilise awk mais pas aussi pousser. Je comprends parfaitement le -F qui est le séparateur mais après je comprends pas grand chose!
Pour le sort je comprends également.
J'utilise awk mais pas aussi pousser. Je comprends parfaitement le -F qui est le séparateur mais après je comprends pas grand chose!
Pour le sort je comprends également.
dubcek
Messages postés
18717
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
16 mars 2024
5 613
Modifié par dubcek le 11/03/2015 à 10:29
Modifié par dubcek le 11/03/2015 à 10:29
j'ai changé le sort
t1[$3]+=$1 dans t1 indexé par la date MM/AAAA on additionne les champs 1
t2[$3]+=$2 même chose pour le champ 2
for (n in t1) on liste tout les index de t1, donc la liste des dates
print t1[n] FS t2[n] FS n et on affiche somme des champs 1, somme des champs 2 et la date
t1[$3]+=$1 dans t1 indexé par la date MM/AAAA on additionne les champs 1
t2[$3]+=$2 même chose pour le champ 2
for (n in t1) on liste tout les index de t1, donc la liste des dates
print t1[n] FS t2[n] FS n et on affiche somme des champs 1, somme des champs 2 et la date
pcsystemd
Messages postés
691
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
15 janvier 2024
22
11 mars 2015 à 10:47
11 mars 2015 à 10:47
Ok c'est plus clair.
Pour le sort je viens de tester je ne vois pas de différence entre ton premier sort et ton second!
Pour le sort je viens de tester je ne vois pas de différence entre ton premier sort et ton second!
dubcek
Messages postés
18717
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
16 mars 2024
5 613
11 mars 2015 à 11:09
11 mars 2015 à 11:09
avec sort -t "/" -k 2
51;29;01/2010
73;47;02/2010
76;132;04/2010
88;58;03/2010
116;162;02/2011
58;108;01/2011
avec sort -t ";" -k 3.4,3.7 -k 3.1,3.2
51;29;01/2010
73;47;02/2010
88;58;03/2010
76;132;04/2010
58;108;01/2011
116;162;02/2011
51;29;01/2010
73;47;02/2010
76;132;04/2010
88;58;03/2010
116;162;02/2011
58;108;01/2011
avec sort -t ";" -k 3.4,3.7 -k 3.1,3.2
51;29;01/2010
73;47;02/2010
88;58;03/2010
76;132;04/2010
58;108;01/2011
116;162;02/2011
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
pcsystemd
Messages postés
691
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
15 janvier 2024
22
11 mars 2015 à 12:21
11 mars 2015 à 12:21
Ok merci.
Par contre cela ne fonctionne pas. En effet j'ai pas l'addition des deux fichiers dans le fichier3 mais une ligne du premier fichier puis une ligne du second fichier comme ceci :
1282;459;01/2010 <== fichier1
22;16;01/2010 <==fichier2
1269;459;02/2010 <== fichier1
28;21;02/2010 <== fichier2
etc..
Lorsque j'execute a la main la commande AWK j'ai la même chose :
Par contre cela ne fonctionne pas. En effet j'ai pas l'addition des deux fichiers dans le fichier3 mais une ligne du premier fichier puis une ligne du second fichier comme ceci :
1282;459;01/2010 <== fichier1
22;16;01/2010 <==fichier2
1269;459;02/2010 <== fichier1
28;21;02/2010 <== fichier2
etc..
Lorsque j'execute a la main la commande AWK j'ai la même chose :
awk -F ";" '{t1[$3]+=$1; t2[$3]+=$2} END {for (n in t1)print t1[n] FS t2[n] FS n}' fichier1 fichier2 | sort -t ";" -k 3.4,3.7 -k 3.1,3.2 > fichier3
dubcek
Messages postés
18717
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
16 mars 2024
5 613
11 mars 2015 à 14:03
11 mars 2015 à 14:03
les données correspondent avec celles en exemple dans le post 1 ?
essayer avec nawk
essayer avec nawk
pcsystemd
Messages postés
691
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
15 janvier 2024
22
11 mars 2015 à 14:46
11 mars 2015 à 14:46
Oui les données correspondent.
Avec nawk c'est pareil.
Petite précision les champs 1 et 2 peuvent être composés de nombres ayant 2,3,4 chiffres.
Avec nawk c'est pareil.
Petite précision les champs 1 et 2 peuvent être composés de nombres ayant 2,3,4 chiffres.
dubcek
Messages postés
18717
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
16 mars 2024
5 613
11 mars 2015 à 14:53
11 mars 2015 à 14:53
montre les données
pcsystemd
Messages postés
691
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
15 janvier 2024
22
11 mars 2015 à 15:50
11 mars 2015 à 15:50
Fichier1
1282;459;01/2010
1269;459;02/2010
1637;491;03/2010
1442;473;04/2010
1141;459;05/2010
1254;462;06/2010
1069;430;07/2010
864;370;08/2010
1324;450;09/2010
1238;453;10/2010
1186;441;11/2010
872;369;12/2010
1156;438;01/2011
1249;454;02/2011
1443;473;03/2011
1275;472;04/2011
1223;474;05/2011
1139;452;06/2011
etc..
Fichier2
22;16;01/2010
28;21;02/2010
53;29;03/2010
36;21;04/2010
27;18;05/2010
35;20;06/2010
19;16;07/2010
21;16;08/2010
39;25;09/2010
34;19;10/2010
35;24;11/2010
25;17;12/2010
32;24;01/2011
44;23;02/2011
28;21;03/2011
41;28;04/2011
46;25;05/2011
51;31;06/2011
62;31;07/2011
60;28;08/2011
79;37;09/2011
81;37;10/2011
76;38;11/2011
54;23;12/2011
79;40;01/2012
74;42;02/2012
etc..
1282;459;01/2010
1269;459;02/2010
1637;491;03/2010
1442;473;04/2010
1141;459;05/2010
1254;462;06/2010
1069;430;07/2010
864;370;08/2010
1324;450;09/2010
1238;453;10/2010
1186;441;11/2010
872;369;12/2010
1156;438;01/2011
1249;454;02/2011
1443;473;03/2011
1275;472;04/2011
1223;474;05/2011
1139;452;06/2011
etc..
Fichier2
22;16;01/2010
28;21;02/2010
53;29;03/2010
36;21;04/2010
27;18;05/2010
35;20;06/2010
19;16;07/2010
21;16;08/2010
39;25;09/2010
34;19;10/2010
35;24;11/2010
25;17;12/2010
32;24;01/2011
44;23;02/2011
28;21;03/2011
41;28;04/2011
46;25;05/2011
51;31;06/2011
62;31;07/2011
60;28;08/2011
79;37;09/2011
81;37;10/2011
76;38;11/2011
54;23;12/2011
79;40;01/2012
74;42;02/2012
etc..
dubcek
Messages postés
18717
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
16 mars 2024
5 613
11 mars 2015 à 16:10
11 mars 2015 à 16:10
j'ai ça comme résultat
$ awk -F ";" '{t1[$3]+=$1; t2[$3]+=$2} END {for (n in t1)print t1[n] FS t2[n] FS n}' fic1 fic2 | sort -t ";" -k 3.4,3.7 -k 3.1,3.2
1304;475;01/2010
1297;480;02/2010
1690;520;03/2010
1478;494;04/2010
1168;477;05/2010
1289;482;06/2010
1088;446;07/2010
885;386;08/2010
1363;475;09/2010
1272;472;10/2010
1221;465;11/2010
897;386;12/2010
1188;462;01/2011
1293;477;02/2011
1471;494;03/2011
1316;500;04/2011
1269;499;05/2011
1190;483;06/2011
62;31;07/2011
60;28;08/2011
79;37;09/2011
81;37;10/2011
76;38;11/2011
54;23;12/2011
79;40;01/2012
74;42;02/2012
$
pcsystemd
Messages postés
691
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
15 janvier 2024
22
11 mars 2015 à 16:36
11 mars 2015 à 16:36
Peut être que le souci vient de la version de ma distrib qui est une 2.6 sur ma machine de test et qui n'interprète pas le AWK correctement!
dubcek
Messages postés
18717
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
16 mars 2024
5 613
11 mars 2015 à 17:06
11 mars 2015 à 17:06
quelle version ?
awk -W version
ou
awk --version
awk -W version
ou
awk --version
pcsystemd
Messages postés
691
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
15 janvier 2024
22
12 mars 2015 à 06:47
12 mars 2015 à 06:47
Voici ma version : mawk 1.3.3 Nov 1996
dubcek
Messages postés
18717
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
16 mars 2024
5 613
Modifié par dubcek le 12/03/2015 à 08:19
Modifié par dubcek le 12/03/2015 à 08:19
effectivement, vieil awk, essayer gawk
je vais tester avec mawk
mawk 1.3.3 et GNU Awk 3.1.6 me retournent les mêmes résultats
je vais tester avec mawk
mawk 1.3.3 et GNU Awk 3.1.6 me retournent les mêmes résultats
pcsystemd
Messages postés
691
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
15 janvier 2024
22
Modifié par pcsystemd le 12/03/2015 à 08:53
Modifié par pcsystemd le 12/03/2015 à 08:53
J'ai essayé avec gawk mais pareil.
Ce qui est curieux, c'est que si je lance la commande suivante :
Cela fonctionne en utilisant fichier1 et fichier2, par contre si j'utilise mes vrais noms de fichiers comme ci-dessous cela ne fonctionne pas!
L'accès au savoir est la première liberté que chaque homme devrait avoir.
Ce qui est curieux, c'est que si je lance la commande suivante :
awk -F ";" '{t1[$3]+=$1; t2[$3]+=$2} END {for (n in t1)print t1[n] FS t2[n] FS n}' fichier1 fichier2 | sort -t ";" -k 3.4,3.7 -k 3.1,3.2
Cela fonctionne en utilisant fichier1 et fichier2, par contre si j'utilise mes vrais noms de fichiers comme ci-dessous cela ne fonctionne pas!
awk -F ";" '{t1[$3]+=$1; t2[$3]+=$2} END {for (n in t1)print t1[n] FS t2[n] FS n}' mois_tmp_20150312.csv mois_autres_20150312.csv | sort -t ";" -k 3.4,3.7 -k 3.1,3.2
L'accès au savoir est la première liberté que chaque homme devrait avoir.
zipe31
Messages postés
36402
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
6 410
12 mars 2015 à 09:01
12 mars 2015 à 09:01
Salut,
Est-ce que tes fichiers csv sont bien au format Unix ?
Est-ce que tes fichiers csv sont bien au format Unix ?
dubcek
Messages postés
18717
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
16 mars 2024
5 613
12 mars 2015 à 09:09
12 mars 2015 à 09:09
ou une vieille commande sort
pcsystemd
Messages postés
691
Date d'inscription
dimanche 27 novembre 2005
Statut
Membre
Dernière intervention
15 janvier 2024
22
Modifié par pcsystemd le 12/03/2015 à 09:46
Modifié par pcsystemd le 12/03/2015 à 09:46
Salut zipe31,
Effectivement un des fichiers est crée sous Windows et je le récupère sur ma machine sous environnement Débian donc Unix pour traitement ce qui pourrait être le souci!
Bon finalement j'ai converti mon fichier au format Unix comment suite :
et maintenant cela fonctionne.
Merci a vous deux
L'accès au savoir est la première liberté que chaque homme devrait avoir.
Effectivement un des fichiers est crée sous Windows et je le récupère sur ma machine sous environnement Débian donc Unix pour traitement ce qui pourrait être le souci!
Bon finalement j'ai converti mon fichier au format Unix comment suite :
sed 's/\x0D$//' fichier1 > fichier2
et maintenant cela fonctionne.
Merci a vous deux
L'accès au savoir est la première liberté que chaque homme devrait avoir.
dubcek
Messages postés
18717
Date d'inscription
lundi 15 janvier 2007
Statut
Contributeur
Dernière intervention
16 mars 2024
5 613
Modifié par dubcek le 12/03/2015 à 10:05
Modifié par dubcek le 12/03/2015 à 10:05
.csv ... la signature du mal ...
si awk pointe sur mawk, plutot utiliser gawk
si awk pointe sur mawk, plutot utiliser gawk