Comparaison deux fichiers.
Résolu
Bonjour,
Un fichier est généré toutes les heures avec 2000 lignes (limit max).
Chaque heure, le nouveau fichier contient une partie des lignes du fichier généré l'heure précédente + des nouvelles lignes.
Chaque heure, à la fin du traitement, j'aimerais avoir un fichier qui ne contient aucun doublon, soit les lignes des heures précédentes + uniquement les nouvelles du nouveau fichier.
mon idée:
Il y a mieux?
Merci.
Un fichier est généré toutes les heures avec 2000 lignes (limit max).
Chaque heure, le nouveau fichier contient une partie des lignes du fichier généré l'heure précédente + des nouvelles lignes.
Chaque heure, à la fin du traitement, j'aimerais avoir un fichier qui ne contient aucun doublon, soit les lignes des heures précédentes + uniquement les nouvelles du nouveau fichier.
mon idée:
comm -3 FIC(H-1) FICH > FIC.com cat FIC.com >> FIC(H-1)
Il y a mieux?
Merci.
Configuration: Windows / Chrome 92.0.4515.131
2 réponses
-
Bonjour
Vu les contraintes imposées par ton API, il semble effectivement compliqué d'envisager un logger. Du coup, ta solution basée surcomm
me paraît très bienà condition que les lignes soient ordonnées. Autrementcomm
peut ne pas marcher comme le montre cet exemple :
(mando@silk) (~) $ cat fichier1
1 a
3 c
2 b
(mando@silk) (~) $ cat fichier2
2 b
1 A
(mando@silk) (~) $ comm -3 fichier1 fichier2
1 a
2 b
comm: le fichier 2 n'est pas dans l'ordre trié
1 A
3 c
comm: le fichier 1 n'est pas dans l'ordre trié
2 b
comm: l'entrée n'est pas dans l'ordre trié
Or vu le format de tes fichiers, il n'est pas évident que tes fichiers soient triés.
En tout cas, si tu observes un problème lié à ça, tu pourrais te rabattre dudiff
pour extraire les lignes apparues dans le dernier fichier (ce sont celles qui commenceront par +).
diff --new-line-format="%L" --old-line-format="" --unchanged-line-format="" fichier1 fichier2
Pour plus de détails ou voir d'autres approches, voir cette discussion.
Bonne chance -
Bonjour,
Il faudrait clarifier avec un petit exemple pour être sûr de comprendre ton problème.
Si j'ai bien compris tu as un buffer de 2000 lignes dont tu fais un dump toutes les heures de ce buffer, et tu veux à partir de ces dumps, reconstruire l'ensemble des lignes qui ont engendrées ces photos.
Ensuite, le fait que tu utilises comm laisse supposer que tes fichiers sont triés (e.g. parce que les lignes sont horodatées) -- je suppose qu'il s'agit d'une sorte de log.
Si c'est bien ça,comm
me paraît très bien, car contrairement àdiff
, il va exploiter le fait que tes fichiers sont triés (e.g. parce que les lignes sont horodatées, comme dans un log) et sera donc plus rapide quediff
.
Après la question c'est est ce que le problème ne devrait pas être traité en amont, c'est-à-dire, au lieu de faire un dump périodique, ne faudrait-il pas plutôt que l'outil qui génère ses lignes utilise un logger (e.g.rsyslog
) pour avoir un unique fichier mis à jour en temps réel.
Bonne chance-
Bonjour et merci pour la réponse.
Non, je ne peux pas traiter en amont car l'API qui génère le fichier est limité à 1000 lignes. Chaque ligne correspond à 1 backup de 1 serveur.
J'ai l'impression que le sort avant le comm pose problème.
Exemple de résultat sur 1 ligne (très longue):cluster00,VEGA,SuccessfulWithWarnings,Backup,VirtualMachine:::a5d0fb55-4c5a-4734-96e3-c6cc3349c820-vm-95635,VmwareVirtualMachine,swucfraej949,sapifrfx1vc03.fr.intranet,SLA_UAT,2021-09-15T04:06:30.386Z,2021-09-15T04:09:54.849Z,2021-09-14T04:03:35.096Z,2021-09-16T04:00:00.000Z,false,LOCAL,0,1479737344,85899345920,20294282,204463,RVMHM193S001062,0,false,15,2021-03-19T19:48:56.931Z,vm-95635,sepifrfx11538.fr.intranet,SIR-WIN-INF-HP,poweredOn,2021-03-19T19:48:56.931Z,100.83.192.202,Unregistered,Microsoft Windows Server 2016 or later (64-bit),false,true,false,FAILED,sapifrfx1vc03.fr.intranet/SIRIUS/vm/VM_CLOUD/Windows,sapifrfx1vc03.fr.intranet/SIRIUS/SIR-WIN-INF-HP/sepifrfx11538.fr.intranet
cluster00,VEGA,SuccessfulWithWarnings,Backup,VirtualMachine:::a5d0fb55-4c5a-4734-96e3-c6cc3349c820-vm-95637,VmwareVirtualMachine,swucfraej172,sapifrfx1vc03.fr.intranet,SLA_UAT,2021-09-15T04:12:44.632Z,2021-09-15T04:15:26.143Z,2021-09-14T04:10:01.633Z,2021-09-16T04:00:00.000Z,false,LOCAL,0,1527316480,85899345920,25379558,161511,RVMHM193S000910,0,false,15,2021-03-19T19:47:17.363Z,vm-95637,sepifrfx10203.fr.intranet,VEG-WIN-INF-HP,poweredOn,2021-03-19T19:47:17.363Z,100.83.240.190,Unregistered,Microsoft Windows Server 2016 or later (64-bit),false,true,false,FAILED,sapifrfx1vc03.fr.intranet/VEGA/vm/VM_CLOUD/Windows,sapifrfx1vc03.fr.intranet/VEGA/VEG-WIN-INF-HP/sepifrfx10203.fr.intranet
Merci.
-