fractionnement de fichiers sous Unix

Je me demande simplement s’il existe un moyen plus rapide de diviser un fichier en N blocs autres que «unix».

Fondamentalement, j’ai de gros fichiers que je voudrais diviser en petits morceaux et opérer sur chacun en parallèle.

Je suppose que vous utilisez split -b qui sera plus efficace en termes de CPU que le fractionnement par lignes, mais lit tout le fichier d’entrée et l’écrit dans chaque fichier. Si la nature en série de l’exécution de cette partie de la split est votre goulot d’étranglement, vous pouvez utiliser dd pour extraire les morceaux du fichier en parallèle. Vous aurez besoin d’une commande dd distincte pour chaque processus parallèle. Voici un exemple de ligne de commande (en supposant que le the_input_file est un fichier volumineux extrait du milieu):

 dd skip=400 count=1 if=the_input_file bs=512 of=_output 

Pour que cela fonctionne, vous devrez choisir les valeurs appropriées de count et bs (celles ci-dessus sont très petites). Chaque travailleur devra également choisir une valeur de skip afin que les morceaux ne se chevauchent pas. Mais c’est efficace; dd implémente le skip avec une opération de recherche.

Bien sûr, cela n’est toujours pas aussi efficace que d’implémenter votre processus consommateur de données de telle sorte qu’il puisse lire directement une partie spécifique du fichier d’entrée, parallèlement à d’autres processus de consommation similaires. Mais je suppose que si vous pouviez faire cela, vous n’auriez pas posé cette question.

Étant donné qu’il s’agit d’un utilitaire de système d’exploitation, je serais enclin à penser qu’il est optimisé pour de meilleures performances.

Vous pouvez voir cette question (ou faire un man -k split man split ou un man -k split man split ) pour trouver les commandes connexes que vous pourriez utiliser au lieu de les split .

Si vous envisagez d’implémenter votre propre solution dans say C, alors je vous suggère de lancer quelques tests de performances pour votre système / environnement spécifique et des exemples de données et de déterminer quel outil utiliser.

Note : si vous ne le faites pas régulièrement, cela ne vaudra peut-être pas la peine d’y penser, utilisez un outil adapté à vos besoins (dans ce cas-ci, split )