Alors que votre fichier d'origine contient des lignes se terminant par \n
, votre fichier trié en a \r\n
. L'ajout du \r
est ce qui change la taille.
Pour illustrer, 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 voir, le fichier trié dupé est plus court de quelques lignes et, par conséquent, de quelques octets plus petit. Votre dossier 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 grand. Si nous examinons maintenant la première ligne, nous pouvons voir le supplément \r
:
$ head -n1 sorted-file.txt | od -c
0000000 a \r \n
0000003
Qui ne sont pas présents dans celui que j'ai créé sur Linux:
$ head -n1 sorted-file.linux.txt | od -c
0000000 a \n
0000002
Si nous supprimons maintenant le \r
fichier 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
\r\n
fins de ligne, tandis que le fichier d'entrée a des\n
fins de ligne. Vous devriez peut-être définir vos paramètres régionaux différemment. EssayezLC_ALL=C
devant chaque commande.