In Perl 5 können Sie wc -l
mit Oneliner emulieren :
perl -lnE 'END {say $.}' test.txt
So implementieren Sie diese Funktionalität auf Raku
Wenn Sie versuchen, dies zu implementieren:
raku -e 'say "test.txt".IO.open.lines.elems'
es stellt sich als langsam heraus und verbraucht viel Speicher
Informationen zur Reproduktion:
$ 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
), wäre es immer noch gut, eine raku -v
Ausgabe zu haben . Bitte denken Sie auch daran, die Ausgabe des Timings meines aktuellen Vorschlags hinzuzufügen. Vielleicht werde ich 'ascii'
später am Wochenende auf den Decoder umsteigen, um eine bessere Zeit zu erzielen.
-l
Nebenbei bemerkt: Das Flag für Perl verlangsamt das Perl erheblich und ist in diesem Fall nicht nützlich. Auf meinem Computer für eine Datei mit zufälliger Zeilenlänge und etwa 200.000 Zeilen führt das Entfernen -l
zu einer 40% igen Verbesserung.
wc
(die Dateigröße enthalten sollte) hinzufügen . Vielen Dank.