Trong khi tệp gốc của bạn có các dòng kết thúc bằng \n
, tệp được sắp xếp của bạn có \r\n
. Việc bổ sung \r
là những gì thay đổi kích thước.
Để minh họa, đây là những gì xảy ra khi tôi chạy lệnh của bạn trên hệ thống Linux của mình:
$ 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
Như bạn có thể thấy, tệp khử trùng được sắp xếp ngắn hơn một vài dòng và do đó, một vài byte nhỏ hơn. Tập tin của bạn, tuy nhiên, là khác nhau:
$ wc -l sorted-file.linux.txt sorted-file.txt
271576 sorted-file.linux.txt
271576 sorted-file.txt
Hai tệp có cùng số dòng, nhưng:
$ 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
Cái sorted-file.txt
tôi tải về từ liên kết của bạn lớn hơn. Nếu bây giờ chúng ta kiểm tra dòng đầu tiên, chúng ta có thể thấy thêm \r
:
$ head -n1 sorted-file.txt | od -c
0000000 a \r \n
0000003
Không có trong cái tôi tạo trên Linux:
$ head -n1 sorted-file.linux.txt | od -c
0000000 a \n
0000002
Nếu bây giờ chúng tôi xóa \r
tệp khỏi tệp của bạn:
$ tr -d '\r' < sorted-file.txt > new-sorted-file.txt
Chúng tôi nhận được kết quả mong đợi, một tệp nhỏ hơn bản gốc, giống như tệp tôi đã tạo trên hệ thống của mình:
$ 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
kết thúc dòng, trong khi tệp đầu vào có\n
kết thúc dòng. Có lẽ bạn nên đặt miền địa phương của bạn khác nhau. Hãy thửLC_ALL=C
trước mỗi lệnh.