Nous avons un fichier de données d’un client d’une taille de 1 443 777 659 octets.
La sortie triée a des lignes manquantes et sa taille est seulement de 1 269 801 985 octets.
Exemple de commande: sort -k 1,10 -T. -s -i file_to_sort.txt -o out.txt
Nous avons essayé des systèmes Win 7 et XP 32 bits.
Nous avons essayé le fichier sort.exe fourni avec Windows, ainsi que les fichiers binaires d'UnxUtils et de Gnu coreutils.
Aucun ne donne une erreur, mais tous ont exactement la même taille de sortie. J'ai essayé un autre utilitaire gratuit qui fonctionne mais est beaucoup plus lent.
Je pense que cela est peut-être dû à une limitation de 32 bits. Toutefois, la taille du fichier ne semble pas proche des suspects habituels et ces programmes fonctionnent en écrivant et en fusionnant des fichiers plus petits, dont aucun ne dépasse les 2 Go.
Des conseils sur la façon d'aller au fond des choses? Merci.
Réponses:
OK, le problème n'était donc pas du tout lié à la taille du fichier. Il semble que le fichier soit ouvert en mode texte et qu'il contienne un caractère 0x1A (^ Z ou EOF sous Windows) vers la fin.
Une fois que ce caractère a été touché lors de la saisie, il arrête de lire. Il n'y a aucun moyen de contourner cela car il n'y a pas d'indicateur pour ouvrir le fichier en tant que binaire.
J'aurais dû trouver cela plus rapidement, mais ce n'est pas si facile de creuser un fichier de 1,5 Go :)
Requête associée: https://stackoverflow.com/questions/13582804/why-can-windows-not-read-beyond-the-0x1a-eof-character-but-unix-can
la source
Vous ne voulez pas ignorer les caractères non imprimables si le fichier les contient. Supprimez l'option -i et exécutez-la avec LC_ALL = C.
par exemple.
la source
sort /locale=C
.