Mam plik tekstowy o rozmiarze 2958616 bajtów. Po uruchomieniu sort < file.txt | uniq > sorted-file.txt
otrzymuję plik tekstowy o rozmiarze 3213965 bajtów. Dlaczego mój posortowany plik tekstowy jest większy?
Możesz pobrać pliki tekstowe tutaj .
text-processing
wb9688
źródło
źródło
\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.locale
? Czy na pewno nie utworzyłeś pliku w innym systemie?sed '/^[a-z]*$/d' < file.txt | wc -l
dał mi 305 linii.â ê î ñ ô ö öö û
te, których nie ma w zestawie ASCII.Odpowiedzi:
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:
Jak widać, posortowany wyodrębniony plik ma kilka wierszy krótszych, a tym samym kilka bajtów mniejszych. Twój plik jest jednak inny:
Dwa pliki mają dokładnie taką samą liczbę linii, ale:
Ten
sorted-file.txt
, który pobrałem z twojego linku, jest większy. Jeśli teraz przeanalizujemy pierwszą linię, zobaczymy dodatkowe\r
:Których nie ma w utworzonym przeze mnie systemie Linux:
Jeśli teraz usuniemy
\r
z twojego pliku:Otrzymujemy oczekiwany wynik, plik mniejszy niż oryginał, tak jak ten, który utworzyłem w moim systemie:
źródło
\r\n
zakończenia linii są kwestią Windows.hexdump
ujawnia to!Twój posortowany plik jest większy, ponieważ używa zakończeń linii systemu Windows
\r\n
(dwa bajty) zamiast zakończeń linii systemu Linux\n
(jeden bajt).Czy to możliwe, że uruchomiłeś to polecenie powyżej w systemie Windows przy użyciu narzędzi takich jak
cygwin
lub nowego podsystemu Linux dla Windows 10? A może prowadziłeś coś w Wine?źródło