Pourquoi mon fichier sortingé est-il plus gros?

J’ai un fichier texte 2958616 octets. Quand je lance sort sorted-file.txt sort sorted-file.txt , je reçois un fichier texte de 3213965 octets. Pourquoi mon fichier texte sortingé est-il plus gros?

Vous pouvez télécharger les fichiers texte ici .

Bien que votre fichier d’origine comporte des lignes se terminant par \n , votre fichier sortingé contient \r\n . L’ajout de la \r est ce qui change la taille.

Pour illustrer ceci, voici ce qui se passe lorsque j’exécute votre commande sur mon système Linux:

 $ sort < file.txt | uniq > sorted-file.linux.txt $ ls -l file.txt sorted-file.linux.txt -rw-r--r-- 1 terdon terdon 2958616 Jul 10 12:11 file.txt -rw-r--r-- 1 terdon terdon 2942389 Jul 10 15:15 sorted-file.linux.txt $ wc -l file.txt sorted-file.linux.txt 273882 file.txt 271576 sorted-file.linux.txt 

Comme vous pouvez le constater, le fichier de-duped sortingé est plus court de quelques lignes et, par conséquent, de quelques octets plus petits. Votre fichier est cependant différent:

 $ wc -l sorted-file.linux.txt sorted-file.txt 271576 sorted-file.linux.txt 271576 sorted-file.txt 

Les deux fichiers ont exactement le même nombre de lignes, mais:

 $ ls -l file.txt sorted-file.linux.txt sorted-file.txt -rw-r--r-- 1 terdon terdon 2958616 Jul 10 12:11 file.txt -rw-r--r-- 1 terdon terdon 2942389 Jul 10 15:15 sorted-file.linux.txt -rw-r--r-- 1 terdon terdon 3213965 Jul 10 12:11 sorted-file.txt 

Le sorted-file.txt , celui que j’ai téléchargé à partir de votre lien, est plus gros. Si nous examinons maintenant la première ligne, nous pouvons voir un extra:

 $ head -n1 sorted-file.txt | od -c 0000000 a \r \n 0000003 

Qui ne sont pas présents dans celui que j’ai créé sous Linux:

 $ head -n1 sorted-file.linux.txt | od -c 0000000 a \n 0000002 

Si nous supprimons maintenant le \r de votre fichier:

 $ tr -d '\r' < sorted-file.txt > new-sorted-file.txt 

Nous obtenons le résultat attendu, un fichier plus petit que l’original, tout comme celui que j’ai créé sur mon système:

 $ ls -l sorted-file.linux.txt new-sorted-file.txt file.txt -rw-r--r-- 1 terdon terdon 2958616 Jul 10 12:11 file.txt -rw-r--r-- 1 terdon terdon 2942389 Jul 10 15:19 new-sorted-file.txt -rw-r--r-- 1 terdon terdon 2942389 Jul 10 15:15 sorted-file.linux.txt 

hexdump révèle!

 $ hexdump -cn 32 file.txt 0000000 adhd \nadsl \namvb \na 0000010 ov \naow \narob \nasfa 0000020 $ hexdump -cn 32 my-sorted.txt 0000000 a \naa \naaa \naad \naad 0000010 s \naafje \naafjes \na 0000020 $ hexdump -cn 32 sorted-file.txt 0000000 a \r \naa \r \naaa \r \naad \r 0000010 \naads \r \naafje \r \naa 0000020 

Votre fichier sortingé est plus volumineux, car il utilise les fins de ligne Windows \r\n (deux octets) au lieu des fins de ligne Linux \n (un octet).

Se pourrait-il que vous utilisiez cette commande ci-dessus sous Windows à l’aide d’outils tels que cygwin ou de ce nouveau sous-système Linux pour Windows 10? Ou avez-vous peut-être couru quelque chose dans Wine?