J'ai un fichier texte de 2958616 octets. Lorsque je cours sort < file.txt | uniq > sorted-file.txt
, j'obtiens un fichier texte de 3213965 octets. Pourquoi mon fichier texte trié est-il plus gros?
Vous pouvez télécharger les fichiers texte ici .
text-processing
wb9688
la source
la source
\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.locale
? Êtes-vous sûr de ne pas avoir créé le fichier sur un autre système?sed '/^[a-z]*$/d' < file.txt | wc -l
m'a donné 305 lignes.â ê î ñ ô ö öö û
ceux qui ne sont pas dans l'ensemble ASCII.Réponses:
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:
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:
Les deux fichiers ont exactement le même nombre de lignes, mais:
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
:Qui ne sont pas présents dans celui que j'ai créé sur Linux:
Si nous supprimons maintenant le
\r
fichier de votre fichier:Nous obtenons le résultat attendu, un fichier plus petit que l'original, tout comme celui que j'ai créé sur mon système:
la source
\r\n
fins de ligne sont une chose Windows.hexdump
le révèle!Votre fichier trié est plus volumineux car il utilise des fins de ligne Windows
\r\n
(deux octets) au lieu des fins de ligne Linux\n
(un octet).Serait-ce que vous exécutiez cette commande ci-dessus sous Windows en utilisant des outils comme
cygwin
ou ce nouveau sous-système Linux pour Windows 10? Ou avez-vous peut-être exécuté quelque chose dans Wine?la source