Trong perl 5, bạn có thể mô phỏng wc -l
bằng oneliner:
perl -lnE 'END {say $.}' test.txt
Cách triển khai chức năng này trên Raku
Nếu bạn cố gắng thực hiện điều này:
raku -e 'say "test.txt".IO.open.lines.elems'
Hóa ra là chậm và sử dụng nhiều bộ nhớ
Thông tin để sao chép:
$ wget http://eforexcel.com/wp/wp-content/uploads/2017/07/1500000%20Sales%20Records.zip
$ unzip "1500000 Sales Records.zip"
$ mv "1500000 Sales Records.csv" part.txt
$ for i in `seq 1 10`; do cat part.txt >> test.txt ; done
$ du -sh test.txt
1.8G test.txt
$ time wc -l test.txt
15000000 test.txt
real 0m0,350s
user 0m0,143s
sys 0m0,205s
$ time perl -lnE 'END { say $. }' test.txt
15000001
real 0m1,981s
user 0m1,719s
sys 0m0,256s
$ time raku -e 'say "test.txt".IO.open.lines.elems'
15000001
real 2m51,852s
user 0m25,129s
sys 0m6,378s
# Using swap (maximum uses 2.2G swap):
# Before `raku -e ''`
$ free -m
total used free shared buff/cache available
Mem: 15009 1695 12604 107 708 12917
Swap: 7583 0 7583
# After `raku -e ''`
$ free -m
total used free shared buff/cache available
Mem: 15009 752 13923 72 332 13899
Swap: 7583 779 6804
# Swap not used
$ time raku -ne '++$ andthen END .say' test.txt
15000001
real 1m44,906s
user 2m14,165s
sys 0m0,653s
$ raku -v
This is Rakudo version 2019.11 built on MoarVM version 2019.11
implementing Perl 6.d.
raku
) nhưng vẫn có raku -v
đầu ra tốt. Ngoài ra, vui lòng xem xét thêm đầu ra thời gian của đề xuất hiện tại của tôi. Ngoài ra, tôi có thể xem xét chuyển sang 'ascii'
bộ giải mã vào cuối tuần này để tạo ra thời gian tốt hơn.
-l
cờ cho perl làm chậm đáng kể perl và nó không hữu ích trong trường hợp này. Trên máy của tôi cho một tệp có độ dài dòng ngẫu nhiên và khoảng 200 nghìn dòng, loại bỏ -l
kết quả cải thiện 40%.
wc
(bao gồm kích thước tệp). Cảm ơn bạn.