Saya memiliki file teks 2958616 byte. Ketika saya menjalankan sort < file.txt | uniq > sorted-file.txt
, saya mendapatkan file teks 3213965 byte. Mengapa file teks saya yang diurutkan lebih besar?
Anda dapat mengunduh file teks di sini .
text-processing
wb9688
sumber
sumber
\r\n
akhir baris, sedangkan file input memiliki\n
akhir baris. Mungkin Anda harus mengatur lokasi Anda secara berbeda. CobaLC_ALL=C
di depan setiap perintah.locale
? Anda yakin tidak membuat file di sistem lain?sed '/^[a-z]*$/d' < file.txt | wc -l
memberi saya 305 baris.â ê î ñ ô ö öö û
yang tidak ada dalam set ASCII.Jawaban:
Sementara file asli Anda memiliki garis yang berakhir dengan
\n
, file Anda yang diurutkan memiliki\r\n
. Penambahan\r
inilah yang mengubah ukuran.Sebagai ilustrasi, inilah yang terjadi ketika saya menjalankan perintah Anda di sistem Linux saya:
Seperti yang Anda lihat, file de-duped yang diurutkan lebih pendek beberapa baris dan, akibatnya, beberapa byte lebih kecil. Namun file Anda berbeda:
Kedua file memiliki jumlah baris yang persis sama, tetapi:
Yang
sorted-file.txt
saya unduh dari tautan Anda lebih besar. Jika sekarang kita memeriksa baris pertama, kita dapat melihat tambahan\r
:Yang tidak ada dalam yang saya buat di Linux:
Jika sekarang kami menghapus
\r
dari file Anda:Kami mendapatkan hasil yang diharapkan, file yang lebih kecil dari aslinya, sama seperti yang saya buat di sistem saya:
sumber
\r\n
akhiran baris adalah hal Windows.hexdump
mengungkapkannya!File Anda yang diurutkan lebih besar karena menggunakan ujung baris Windows
\r\n
(dua byte) daripada ujung baris Linux\n
(satu byte).Mungkinkah Anda menjalankan perintah di atas di bawah Windows menggunakan alat seperti
cygwin
atau subsistem Linux baru ini untuk Windows 10? Atau apakah Anda mungkin menjalankan sesuatu di Wine?sumber