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
A voir également:
- Comparaison deux fichiers.
- Comparaison million milliard - Accueil - Technologies
- Deux ecran pc - Guide
- Renommer des fichiers en masse - Guide
- Comment faire deux colonnes sur word - Guide
- Fichiers epub - Guide
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 sur
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 du
Pour plus de détails ou voir d'autres approches, voir cette discussion.
Bonne chance
Vu les contraintes imposées par ton API, il semble effectivement compliqué d'envisager un logger. Du coup, ta solution basée sur
commme paraît très bienà condition que les lignes soient ordonnées. Autrement
commpeut 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 du
diffpour 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,
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.
Bonne chance
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,
commme 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 que
diff.
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):
Merci.
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.
Merci pour votre aide.