Während Ihre ursprüngliche Datei Zeilen enthält, die mit enden \n
, enthält Ihre sortierte Datei \r\n
. Das Hinzufügen von \r
ändert die Größe.
Zur Veranschaulichung geschieht Folgendes, wenn ich Ihren Befehl auf meinem Linux-System ausführe:
$ 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
Wie Sie sehen, ist die sortierte de-dupierte Datei einige Zeilen kürzer und folglich einige Bytes kleiner. Ihre Datei ist jedoch anders:
$ wc -l sorted-file.linux.txt sorted-file.txt
271576 sorted-file.linux.txt
271576 sorted-file.txt
Die beiden Dateien haben genau die gleiche Anzahl von Zeilen, aber:
$ 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
Die sorted-file.txt
, die ich über Ihren Link heruntergeladen habe, ist größer. Wenn wir jetzt die erste Zeile untersuchen, können wir das Extra sehen \r
:
$ head -n1 sorted-file.txt | od -c
0000000 a \r \n
0000003
Welche sind in dem, den ich unter Linux erstellt habe, nicht vorhanden:
$ head -n1 sorted-file.linux.txt | od -c
0000000 a \n
0000002
Wenn wir jetzt die \r
aus Ihrer Datei entfernen :
$ tr -d '\r' < sorted-file.txt > new-sorted-file.txt
Wir erhalten das erwartete Ergebnis, eine Datei, die kleiner als das Original ist, genau wie die, die ich auf meinem System erstellt habe:
$ 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
Zeilenenden, während die Eingabedatei\n
Zeilenenden hat. Vielleicht solltest du dein Gebietsschema anders einstellen. Versuchen Sie esLC_ALL=C
vor jedem Befehl.