प्रस्तुत समाधानों की समय तुलना (उत्तर नहीं)
उत्तरों की दक्षता महत्वपूर्ण नहीं है। फिर भी, @josephwb दृष्टिकोण के बाद, मैंने प्रस्तुत सभी उत्तरों को समय देने की कोशिश की।
मैं विक्टर ह्यूगो "लेस मिसेबल्स" (महान पुस्तक!) के पुर्तगाली अनुवाद को इनपुट के रूप में उपयोग करता हूं और "ए" की घटनाओं को गिनता हूं। मेरे संस्करण में 5 खंड हैं, कई पृष्ठ ...
$ wc miseraveis.txt
29331 304166 1852674 miseraveis.txt
सी उत्तर जीसीसी, (कोई अनुकूलन) के साथ संकलित किए गए थे।
प्रत्येक उत्तर को 3 बार चलाया गया और सर्वश्रेष्ठ चुना गया।
इन नंबरों पर बहुत भरोसा न करें (मेरी मशीन अन्य कार्यों, आदि, आदि कर रही है)। मैं आपके साथ ये समय साझा करता हूं, क्योंकि मुझे कुछ अप्रत्याशित परिणाम मिले हैं और मुझे यकीन है कि आपको कुछ और मिलेगा ...
- १४ समय के १४ समाधानों में १ से कम समय लगा; 9 कम तो 0.1 एस, उनमें से कई पाइप का उपयोग करते हैं
- 2 समाधान, लाइन द्वारा बैश लाइन का उपयोग करके, नई प्रक्रियाएं बनाकर 30k लाइनों को संसाधित किया गया, 10/20 में सही समाधान की गणना करें।
grep -oP a
पेड़ समय तेजी से होता है grep -o a
(10; 11 बनाम 12)
- सी और अन्य के बीच अंतर इतना बड़ा नहीं है जितना मुझे उम्मीद थी। ((;; बनाम २; ३)
- (निष्कर्ष का स्वागत है)
(एक यादृच्छिक क्रम में परिणाम)
=========================1 maxschlepzig
$ time sed 's/[^a]//g' mis.txt | awk '{print length}' > a2
real 0m0.704s ; user 0m0.716s
=========================2 maxschlepzig
$ time tr -d -c 'a\n' < mis.txt | awk '{ print length; }' > a12
real 0m0.022s ; user 0m0.028s
=========================3 jjoao
$ time perl -nE 'say y!a!!' mis.txt > a1
real 0m0.032s ; user 0m0.028s
=========================4 Stéphane Gimenez
$ function countchar(){while read -r i; do echo "$i"|tr -dc "$1"|wc -c; done }
$ time countchar "a" < mis.txt > a3
real 0m27.990s ; user 0m3.132s
=========================5 Loki Astari
$ time awk -Fa '{print NF-1}' mis.txt > a4
real 0m0.064s ; user 0m0.060s
Error : several -1
=========================6 enzotib
$ time awk '{ gsub("[^a]", ""); print length }' mis.txt > a5
real 0m0.781s ; user 0m0.780s
=========================7 user606723
#include <stdio.h> #include <string.h> // int main(int argc, char *argv[]) ... if(line) free(line); }
$ time a.out a < mis.txt > a6
real 0m0.024s ; user 0m0.020s
=========================8 maxschlepzig
#include <stdio.h> // int main(int argc, char **argv){if (argc < 2 || !*argv[1]) { ... return 0; }
$ time a.out a < mis.txt > a7
real 0m0.028s ; user 0m0.024s
=========================9 Stéphane Chazelas
$ time awk '{print gsub(/a/, "")}'< mis.txt > a8
real 0m0.053s ; user 0m0.048s
=========================10 josephwb count total
$ time grep -o a < mis.txt | wc -w > a9
real 0m0.131s ; user 0m0.148s
=========================11 Kannan Mohan count total
$ time grep -o 'a' mis.txt | wc -l > a15
real 0m0.128s ; user 0m0.124s
=========================12 Kannan Mohan count total
$ time grep -oP 'a' mis.txt | wc -l > a16
real 0m0.047s ; user 0m0.044s
=========================13 josephwb Count total
$ time perl -ne '$x+=s/a//g; END {print "$x\n"}'< mis.txt > a10
real 0m0.051s ; user 0m0.048s
=========================14 heemayl
#!/usr/bin/env python2 // with open('mis.txt') as f: for line in f: print line.count('"')
$ time pyt > a11
real 0m0.052s ; user 0m0.052s
=========================15 enzotib
$ time while IFS= read -r line; do line="${line//[!a]/}"; echo "${#line}"; done < mis.txt > a13
real 0m9.254s ; user 0m8.724s
=========================16 bleurp
$ time awk ' {print (split($0,a,"a")-1) }' mis.txt > a14
real 0m0.148s ; user 0m0.144s
Error several -1