Dans Perl 5, vous pouvez émuler en wc -l
utilisant oneliner:
perl -lnE 'END {say $.}' test.txt
Comment implémenter cette fonctionnalité sur Raku
Si vous essayez de l'implémenter:
raku -e 'say "test.txt".IO.open.lines.elems'
il s'avère lent et utilise beaucoup de mémoire
Informations à reproduire:
$ 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
), il serait toujours bon d'avoir une raku -v
sortie. Veuillez également envisager d'ajouter la sortie du calendrier de ma suggestion actuelle. De plus, je pourrais envisager de passer au 'ascii'
décodeur plus tard ce week-end pour produire un meilleur moment.
-l
drapeau pour perl ralentit considérablement le perl et ce n'est pas utile dans ce cas. Sur ma machine pour un fichier avec une longueur de ligne aléatoire et environ 200k lignes, la suppression -l
entraîne une amélioration de 40%.
wc
(qui devrait inclure la taille du fichier). Je vous remercie.