Đối với một tệp thực sự lớn như 1GB wc -l
xảy ra là chậm. Chúng ta có cách tính nhanh hơn số lượng dòng mới cho một tệp cụ thể không?
wc
có quá nhiều chi phí, bạn có thể cố gắng tự thực hiện foreach byte in file: if byte == '\n': linecount++
. Nếu được triển khai trong C hoặc trình biên dịch chương trình, tôi không nghĩ rằng nó sẽ nhanh hơn, ngoại trừ có thể trong không gian kernel trên RTOS với mức độ ưu tiên cao nhất (hoặc thậm chí sử dụng ngắt cho điều đó - bạn không thể làm gì khác với hệ thống. .. được rồi, tôi lạc đề ;-))
time wc -l some_movie.avi
trên một tệp không được lưu trữ, kết quả là 5172672 some_movie.avi -- real 0m57.768s -- user 0m0.255s -- sys 0m0.863s
. Về cơ bản chứng minh @thrig đúng, I / O phá vỡ hiệu suất của bạn trong trường hợp này.
time wc -l some_large_file_smaller_than_cache
hai lần liên tiếp và xem tốc độ hoạt động thứ hai nhanh như thế nào, sau đó time wc -l some_large_file_larger_than_cache
và xem thời gian không thay đổi giữa các lần chạy. Đối với tệp ~ 280 MB tại đây, thời gian từ 1,7 giây đến 0,2 giây, nhưng đối với tệp 2 GB thì 14 giây cả hai lần.
/usr/bin/time wc -l <file>
nói gì? Phần cứng của bạn là gì? Có nhanh hơn nếu bạn chạy lệnh nhiều lần? Chúng tôi thực sự cần thêm thông tin;)
0x0A
, I / O chắc chắn là nút cổ chai.