Optimisation de l’espace pour la commande sort-m UNIX?

J’essaie d’exécuter un test de permutation, qui consiste à fusionner un millier de très gros fichiers pré-sortingés en un méga fichier sortingé.

L’exécution actuelle comporte des fichiers encore plus volumineux que ceux que je fusionne habituellement (de 68 à 106 Mo chacun).

Je n’ai pas assez d’espace disque pour les entrées, les intermédiaires temporaires et les sorties en même temps. Est-il possible de fusionner de manière destructive tous ces fichiers en utilisant le sort ?

Voici la commande que j’utilise actuellement:

 sort -T /media/WD_Book/tmp --compress-program=gzip -g -k 6 -m *.rand.tab > /media/WD_Book/output/merged.rand.tab 

(Les fichiers sont numérotés 0001.rand.tab à 1000.rand.tab et la clé de sorting est en notation exponentielle dans la 6ème colonne [donc -k 6 et -g ].)

Je sais qu’il est possible d’exécuter un sort sans fusion, mais la page de manuel précise qu’elle ne fonctionnera pas pour -m .

Peut-être de cette façon (ATTENTION: peut effacer des données.)

 touch merged.rand.tab # Create a zero-sized result file for file in [0-9]*.rand.tab; do sort -k 6 -g -m merged.rand.tab $file > result.rand.tab rm -f merged.rand.tab mv result.rand.tab merged.rand.tab # you can rm $file if space is really scarce. done 

Échanger fondamentalement de l’espace pour le temps. Vous fusionnez un fichier à la fois avec le résultat de la fusion précédente. Vous pouvez également supprimer le fichier déjà fusionné.

Encore une fois, sauvegardez vos données avant d’essayer. 😉