Ich habe eine 2958616-Byte-Textdatei. Beim Ausführen sort < file.txt | uniq > sorted-file.txt
erhalte ich eine 3213965-Byte-Textdatei. Warum ist meine sortierte Textdatei größer?
Sie können die Textdateien hier herunterladen .
text-processing
wb9688
quelle
quelle
\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.locale
? Sind Sie sicher, dass Sie die Datei nicht auf einem anderen System erstellt haben?sed '/^[a-z]*$/d' < file.txt | wc -l
gab mir 305 Zeilen.â ê î ñ ô ö öö û
solche, die nicht im ASCII-Satz enthalten sind.Antworten:
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:
Wie Sie sehen, ist die sortierte de-dupierte Datei einige Zeilen kürzer und folglich einige Bytes kleiner. Ihre Datei ist jedoch anders:
Die beiden Dateien haben genau die gleiche Anzahl von Zeilen, aber:
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
:Welche sind in dem, den ich unter Linux erstellt habe, nicht vorhanden:
Wenn wir jetzt die
\r
aus Ihrer Datei entfernen :Wir erhalten das erwartete Ergebnis, eine Datei, die kleiner als das Original ist, genau wie die, die ich auf meinem System erstellt habe:
quelle
\r\n
Zeilenenden sind eine Windows-Sache.hexdump
enthüllt es!Ihre sortierte Datei ist größer, weil sie Windows-Zeilenenden
\r\n
(zwei Bytes) anstelle von Linux-Zeilenenden\n
(ein Byte) verwendet.Könnte es sein, dass Sie diesen Befehl unter Windows mit Tools wie
cygwin
oder diesem neuen Linux-Subsystem für Windows 10 ausgeführt haben? Oder hast du vielleicht etwas in Wein laufen lassen?quelle