Saya harus membaca file besar dan sebelum saya mulai membacanya, saya perlu mengetahui jumlah baris dalam file (yang jutaan).
Saya telah menerapkan banyak solusi dan telah menemukan satu. Tetapi selama pencarian saya, saya berpikir untuk melihat cara wc -l
kerjanya. Saya tidak dapat menemukan apa pun di Google.
Meskipun saya telah menemukan solusi untuk masalah saya, saya masih ingin tahu cara wc -l
kerjanya karena dapat menghitung jumlah baris file dengan 92 Juta baris dalam beberapa detik!
Bagaimana?
Jawaban:
Itu membaca seluruh file dan menghitung jumlah akhir baris. Menghitung ujung garis benar-benar murah; sebagian besar waktu yang dihabiskan adalah membaca file. Jika file tersebut (sebagian besar) ada dalam cache buffer, itu akan menjadi murah juga. Kalau tidak, itu akan tergantung pada kecepatan penyimpanan file Anda.
Dengan kata lain, tidak ada sihir.
sumber
WC hanya membaca file dalam blok byte mentah (lebih disukai dalam kelipatan ukuran blok alami dari sistem file yang mendasarinya di mana file itu berada).
Kemudian hanya memindai melalui buffer menghitung karakter end-of-line. (Ini juga menghitung spasi, tab, umpan formulir, dan karakter khusus lainnya, kalau-kalau Anda menginginkan informasi lain selain -l output.)
Membaca dari disk adalah bagian yang mahal dalam hal kecepatan. Pemindaian buffer membutuhkan waktu lebih lama dibandingkan dengan itu.
Katakanlah Anda memiliki 90 juta baris dengan rata-rata 100 karakter per baris.
Itu sekitar 9.000.000.000 karakter atau sekitar 860 MB.
PC yang layak dengan drive SATA-3Gb / s akan melakukan itu di bawah 10 detik. Bahkan pada sistem file yang relatif lambat dengan beberapa aktivitas lain yang terjadi pada saat yang bersamaan.
Mesin yang cepat dengan beberapa penyempurnaan kinerja dan sistem file yang dioptimalkan dapat melakukannya dalam waktu kurang dari 5 detik, bahkan tanpa harus menggunakan SATA-6G dan drive SSD.
sumber
\n
) - "-l, --lines mencetak jumlah baris baru \ n \" - diekstraksi dariwc.c
wc -l
.. maaf ...Selamat datang di dunia perangkat lunak bebas. Anda selalu dapat melihat kode sumber
Meskipun saya harus mengakui bahwa saya bukan seorang programmer C, jadi saya bukan orang yang benar-benar dapat menjelaskan kode untuk Anda (dan saya sendiri yang akan dihina).
Yang saya tahu adalah bahwa karena wc tidak membuka file itu sendiri, tetapi meminta OS untuk melakukannya, ini sangat tergantung pada OS, dan tentu saja, bagaimana file tersebut disimpan. Selain itu, saya berharap bahwa praktik pemrograman yang benar harus ada, misalnya tidak mencoba membaca file secara keseluruhan sekaligus, dll.
sumber