Bonjour,
J'ai un problème étrange et j'ai du mal à le résoudre, ne le comprenant pas pleinement.
Habituellement quand je veux concaténer des fichiers, je fais un truc du genre :
Et habituellement ça marche très bien. Même dans mon cas, souvent ça marche bien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 - cat source_* >> result - find . -type f -name "source_*" | xargs -I {} cat {} >> result - find . -type f -name "source_*" | while read line; do cat $line >> result; done
SAUF que...
Je me retrouve confronté à des cas où le cat semble s'arrêter de placer la source dans le result en plein milieu d'une ligne et commence à coller le fichier suivant sans même retourner à la ligne.
(Forcément mes utilisateurs ne sont pas content. Pour expliquer le contexte, afin d'accélérer des traitements longs et ne consommant presque aucune ressources de grosses machines, j'ai fais un script qui parallélise un traitement fourni en paramètre et chaque process va traiter une tranche d'objets et placer le résultat dans un fichier qui lui est propre. Je me retrouve à la fin avec plein de fichiers qu'il me faut assembler en un seul fichier. Ces fichiers temporaires semblent corrects et je ne retrouve pas d'erreur de caractères pouvant expliquer un tel comportement.)
J'ai essayé notamment les trois solutions au dessus. J'ai essayé de mettre un sleep au sein de la boucle while ou for (pensant peut être à une histoire de buffer d'écriture). J'ai essayé des ajouts de lignes vides entre les fichiers et même en fin de fichiers temporaires (à ce moment je croyais que c'était la dernière ligne qui sautait, mais en fait en vérifiant, j'ai vu que l'erreur pouvait se produire en plein milieu).
Je ne sais donc plus trop quoi essayer. Quelqu'un a-t-il une idée? Une piste?
Ma première idée serait un soucis de buffer d'écriture (taille ou temporisation en ayant déjà rendu la main) mais mes tests ne viennent pas forcément étayer mes suppositions...
merci de votre aide.
Partager