Podczas gdy twój oryginalny plik ma linie, które kończą się \n
, twój plik ma \r\n
. Dodanie tego, \r
co zmienia rozmiar.
Aby to zilustrować, oto co dzieje się, gdy uruchamiam polecenie w moim systemie 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
Jak widać, posortowany wyodrębniony plik ma kilka wierszy krótszych, a tym samym kilka bajtów mniejszych. Twój plik jest jednak inny:
$ wc -l sorted-file.linux.txt sorted-file.txt
271576 sorted-file.linux.txt
271576 sorted-file.txt
Dwa pliki mają dokładnie taką samą liczbę linii, ale:
$ 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
Ten sorted-file.txt
, który pobrałem z twojego linku, jest większy. Jeśli teraz przeanalizujemy pierwszą linię, zobaczymy dodatkowe \r
:
$ head -n1 sorted-file.txt | od -c
0000000 a \r \n
0000003
Których nie ma w utworzonym przeze mnie systemie Linux:
$ head -n1 sorted-file.linux.txt | od -c
0000000 a \n
0000002
Jeśli teraz usuniemy \r
z twojego pliku:
$ tr -d '\r' < sorted-file.txt > new-sorted-file.txt
Otrzymujemy oczekiwany wynik, plik mniejszy niż oryginał, tak jak ten, który utworzyłem w moim systemie:
$ 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
zakończenia linii, podczas gdy plik wejściowy ma\n
zakończenia linii. Być może powinieneś ustawić swoje ustawienia regionalne inaczej. SpróbujLC_ALL=C
przed każdym poleceniem.