প্রতিটি লাইনে একটি নির্দিষ্ট চরিত্রের সংখ্যা কীভাবে গণনা করবেন?


87

আমি ভাবছিলাম যে কিছু পাঠ্য প্রক্রিয়াজাতকরণ ইউটিলিটিগুলি দ্বারা প্রতিটি লাইনে একটি নির্দিষ্ট চরিত্রের সংখ্যা কীভাবে গণনা করব?

উদাহরণস্বরূপ, "নিম্নলিখিত পাঠ্যের প্রতিটি লাইনে গণনা করা

"hello!" 
Thank you!

প্রথম লাইনে দুটি রয়েছে এবং দ্বিতীয় লাইনে 0 রয়েছে।

আর একটি উদাহরণ (প্রতিটি লাইনে গণনা করা।


1
কেবল যোগ করতে যাচ্ছি যে আপনি সেডের সাথে নিয়মিত এক্সপ্রেশন ব্যবহার না করে এর জন্য আপনার নিজের 10 লাইন সি প্রোগ্রাম লিখে অনেক বেশি পারফরম্যান্স পেয়েছেন। আপনার ইনপুট ফাইলের আকারের উপর নির্ভর করে আপনার করা উচিত।
ব্যবহারকারী 606723

উত্তর:


104

আপনি এটি দিয়ে করতে পারেন sedএবং awk:

$ sed 's/[^"]//g' dat | awk '{ print length }'
2
0

যেখানে datআপনার উদাহরণ পাঠ্য, সেড মুছে ফেলা (প্রতিটি লাইনের জন্য) সমস্ত অ- "অক্ষর এবং awkপ্রতিটি লাইনের আকারের জন্য মুদ্রণ (যেমন lengthসমান length($0), যেখানে $0বর্তমান রেখাকে বোঝায়)।

অন্য একটি চরিত্রের জন্য আপনাকে কেবল সেড এক্সপ্রেশন পরিবর্তন করতে হবে। উদাহরণস্বরূপ (:

's/[^(]//g'

আপডেট: sed কাজের জন্য একধরণের ওভারকিল - trযথেষ্ট। এর সাথে সমতুল্য সমাধান tr:

$ tr -d -c '"\n' < dat | awk '{ print length; }'

মানে যে trসমস্ত অক্ষর মুছে ফেলা হয় যা -cঅক্ষর সেটটিতে ( অর্থ পরিপূরক) নয় "\n


3
+1 টি অধিক কার্যকরী হওয়া উচিত tr& wcসংস্করণ।
স্টাফেন গিমেনেজ

1
হ্যাঁ, তবে এটি কি ইউনিকোড পরিচালনা করতে পারে?
অ্যাম্ফটামাচাইন

@amphetamachine, হ্যাঁ - অন্তত সঙ্গে একটি দ্রুত পরীক্ষা ß(UTF হেক্স: C3 9f) (পরিবর্তে "), প্রত্যাশিত অর্থাত হিসাবে কাজ করে tr, sedএবং awk- একটি উবুন্টু 10.04 সিস্টেমে / পরিপূর্ণ এবং / প্রতিস্থাপন একটি সমস্যা ছাড়া বেড়ে চলেছে।
ম্যাক্সচলেপজিগ

1
trজিএনইউ ট্রা এবং ক্লাসিক ইউনিক্স টিআর সহ বেশিরভাগ সংস্করণগুলি একক বাইট অক্ষরগুলিতে কাজ করে এবং ইউনিকোড অনুবর্তী নয় .. উইকিপিডিয়া ট্র (ইউনিক্স) থেকে উদ্ধৃত .. এই স্নিপেটটি চেষ্টা করুন: echo "aā⧾c" | tr "ā⧾" b... উবুন্টু 10.04 এ ... ßএকটি একক বাইট ল্যাটিন চরটি প্রসারিত এবং এর দ্বারা পরিচালিত হয় tr... এখানে আসল সমস্যাটি trtr
ইউনিকোডকে

@ ফ্রেড, না, a কোনও একক বাইট চরিত্র নয় - এর ইউনিকোড অবস্থানটি ইউ + 00 ডিএফ, যা ইউটিএফ -8 এ 'সি 3 9 এফ' হিসাবে কোডেড, অর্থাৎ দুটি বাইট tes
maxschlepzig

49

আমি কেবল বিশ্রী ব্যবহার করব

awk -F\" '{print NF-1}' <fileName>

এখানে আমরা ক্ষেত্রের বিভাজককে (-F পতাকা সহ) অক্ষর হিসাবে সেট "করেছিলাম তারপরে আমরা যা করি তা ক্ষেত্রের মুদ্রণ সংখ্যা NF- ১. লক্ষ্য অক্ষরের সংখ্যার সংখ্যা পৃথক ক্ষেত্রের সংখ্যার চেয়ে কম হবে।

শেল দ্বারা ব্যাখ্যা করা মজার চরিত্রগুলির জন্য আপনার কেবল এটি নিশ্চিত হওয়া দরকার যে আপনি সেগুলি থেকে পালিয়ে গেছেন অন্যথায় কমান্ড লাইন চেষ্টা করবে এবং তাদের ব্যাখ্যা করবে। উভয়ের জন্য তাই "এবং )আপনি (মাঠে বিভাজক অব্যাহতি প্রয়োজন \)।


1
পালানোর পরিবর্তে আপনার উত্তরগুলি একক উদ্ধৃতি ব্যবহার করতে সম্পাদনা করুন। এটি কোনও চরিত্রের সাথে (বাদে ') কাজ করবে । এছাড়াও, খালি লাইনগুলির সাথে এটির একটি অদ্ভুত আচরণ রয়েছে।
স্টাফেন গিমেনেজ

প্রশ্নটি বিশেষত ব্যবহার করে "তাই কোডটি এটি দিয়ে কাজ করতে বাধ্য বোধ করি। এটি নির্ভর করে আপনি কী শেলটি আবহাওয়ার ব্যবহার করছেন চরিত্রটি পালাতে হবে তবে বাশ / টিসিএইচ উভয়েরই পালাতে হবে "
মার্টিন ইয়র্ক

অবশ্যই, তবে এতে কোনও সমস্যা নেই -F'"'
স্টাফেন গিমেনেজ

+1 এফএস ব্যবহার করা কতটা ভাল ধারণা .... এটি ফাঁকা-লাইন দেখানো -1 সমাধান করবে এবং উদাহরণস্বরূপ, বাশ কমান্ডলাইন থেকে "$ 1"। ...awk -F"$1" '{print NF==0?NF:NF-1}' filename
পিটার.ও

বিভাজক হিসাবে একাধিক অক্ষরের সাথেও কাজ করুন ... দরকারী!
কয়েল

14

trআরড ব্যবহার wc:

function countchar()
{
    while IFS= read -r i; do printf "%s" "$i" | tr -dc "$1" | wc -m; done
}

ব্যবহার:

$ countchar '"' <file.txt  #returns one count per line of file.txt
1
3
0

$ countchar ')'           #will count parenthesis from stdin
$ countchar '0123456789'  #will count numbers from stdin

3
বিঃদ্রঃ. trএকাধিক বাইট ব্যবহার করা অক্ষরগুলি পরিচালনা করে না .. উইকিপিডিয়া টিআর (ইউনিক্স) দেখুন .. যেমন ie trইউনিকোড অনুবর্তী নয়।
পিটার.ও


আপনার থেকে সাদা স্থানের অক্ষরগুলি সরিয়ে ফেলতে হবে $IFS, অন্যথায় readএগুলি শুরু এবং শেষ থেকে ছাঁটাই করবে।
স্টাফেন চেজেলাস


@ পিটার.ও, কিছু trবাস্তবায়ন মাল্টিবাইট অক্ষরকে সমর্থন করে তবে wc -cবাইটগুলি গণ্য করে, কোনওভাবেই অক্ষর নয় ( wc -mঅক্ষরের প্রয়োজন )।
স্টাফেন চেজেলাস

11

তবুও অন্য বাস্তবায়ন যে বহিরাগত প্রোগ্রাম নির্ভর করে না, এ bash, zsh, yashকিছু বাস্তবায়নের / সংস্করণ এবং ksh:

while IFS= read -r line; do 
  line="${line//[!\"]/}"
  echo "${#line}"
done <input-file

line="${line//[!(]}"গণনার জন্য ব্যবহার করুন (


যখন সর্বশেষ লাইনে একটি পিছনের iling n নেই, তবে লুপটি প্রস্থান করে, যদিও এটি শেষ লাইনটি পড়েছে, এটি ইওএফ নির্দেশ করতে একটি শূন্য-বহির্গমন কোডও ফেরত দেয় ... এটি কাছাকাছি পেতে নীচের স্নিপেটটি কাজ করে (..এটি কিছুক্ষণ ধরে আমাকে বাগিয়ে দিচ্ছে, এবং আমি সবেমাত্র এই eof=false; IFS=; until $eof; do read -r || eof=true; echo "$REPLY"; done
কাজটি

@ গিলস: আপনি /এমন একটি লেজ যুক্ত করেছেন যা ব্যাশে প্রয়োজন হয় না। এটি একটি Ksh প্রয়োজন?
এনজোটিব

1
চিহ্ন /পাশাপাশি ব্যাশ পুরোনো সংস্করণে IIRC ksh এর পুরোনো সংস্করণগুলি প্রয়োজন হয়, এবং।
গিলস

10

awkম্যাচের সংখ্যা খুব বেশি হলে (যা আমার পরিস্থিতি হয়ে থাকে) ব্যবহার করে উত্তরগুলি ব্যর্থ হয়। লোকি-আস্তারি থেকে উত্তরের জন্য , নিম্নলিখিত ত্রুটিটি রিপোর্ট করা হয়েছে:

awk -F" '{print NF-1}' foo.txt 
awk: program limit exceeded: maximum number of fields size=32767
    FILENAME="foo.txt" FNR=1 NR=1

থেকে উত্তরের জন্য enzotib (এবং থেকে সমতুল্য manatwork ), একটি সেগমেন্টেশন ফল্ট দেখা দেয়:

awk '{ gsub("[^\"]", ""); print length }' foo.txt
Segmentation fault

sedদ্বারা সমাধান maxschlepzig সঠিকভাবে কাজ করে, কিন্তু ধীর (নীচের সময়) হয়।

কিছু সমাধান এখনও এখানে প্রস্তাবিত নয়। প্রথমে, ব্যবহার grep:

grep -o \" foo.txt | wc -w

এবং ব্যবহার perl:

perl -ne '$x+=s/\"//g; END {print "$x\n"}' foo.txt

কয়েকটি সমাধানের কয়েকটি সময় এখানে দেওয়া হয়েছে (দ্রুততমের দিকে ধীরতম আদেশ দেওয়া হয়েছে); আমি এখানে জিনিসগুলিকে এক-লাইনারে সীমাবদ্ধ রেখেছি। 'foo.txt' একটি লাইন এবং একটি দীর্ঘ স্ট্রিং সহ এমন একটি ফাইল যা 9৪৯২২ টি মিল রয়েছে।

## sed solution by [maxschlepzig]
$ time sed 's/[^"]//g' foo.txt | awk '{ print length }'
84922
real    0m1.207s
user    0m1.192s
sys     0m0.008s

## using grep
$ time grep -o \" foo.txt | wc -w
84922
real    0m0.109s
user    0m0.100s
sys     0m0.012s

## using perl
$ time perl -ne '$x+=s/\"//g; END {print "$x\n"}' foo.txt
84922
real    0m0.034s
user    0m0.028s
sys     0m0.004s

## the winner: updated tr solution by [maxschlepzig]
$ time tr -d -c '\"\n' < foo.txt |  awk '{ print length }'
84922
real    0m0.016s
user    0m0.012s
sys     0m0.004s

+ ভাল ধারণা! আমি আপনার টেবিলটি প্রসারিত করেছি, একটি নতুন উত্তরে, সম্পাদনা করতে নির্দ্বিধায় (চূড়ান্ত চিত্রটি এতটা পরিষ্কার নয়, তবে আমি বিশ্বাস করি @ ম্যাক্সচ্লেপজিগ দ্রুত সমাধান
হ'ল

ম্যাক্সচেলেপজিগের দ্রবণটি সুপার দ্রুত!
ঠিক


8

অ্যাড্ক এবং জিএসউব সহ আরও একটি সম্ভাব্য বাস্তবায়ন:

awk '{ gsub("[^\"]", ""); print length }' input-file

ফাংশনটি gsubসেডের সমতুল্য 's///g'

gsub("[^(]", "")গণনার জন্য ব্যবহার করুন (


আপনি একটি অক্ষর সংরক্ষণ করতে পারেন, যেমন
স্টিডিন

@ ম্যাক্সচলেপজিগ: হ্যাঁ, অবশ্যই;)
এনজোটিব

1
awk '{print gsub(/"/,"")}' input-fileযথেষ্ট হবে, "স্ট্রিং টি-তে নিয়মিত এক্সপ্রেশন আর এর সাথে মিলে প্রতিটি স্ট্রিংয়ের জন্য স্ট্রিংয়ের বিকল্প দিন এবং বিকল্পগুলির সংখ্যাটি ফিরিয়ে দিন।" (man awk)
manatwork

6

আমি বিরক্ত হয়ে একটি সি প্রোগ্রাম লেখার সিদ্ধান্ত নিয়েছি।

আপনার সম্ভবত ইনপুট বৈধতা যুক্ত করা উচিত, তবে এটি সমস্ত সেট ছাড়া অন্য।

#include <stdio.h>
#include <string.h>

int main(int argc, char *argv[])
{
        char c = argv[1][0];
        char * line = NULL;
        size_t len = 0;
        while (getline(&line, &len, stdin) != -1)
        {
                int count = 0;
                char * s = line;
                while (*s) if(*s++ == c) count++;
                printf("%d\n",count);
        }
        if(line) free(line);
}

ধন্যবাদ! বিরক্ত হওয়ার জন্য ধন্যবাদ যাতে আমি কিছু শিখতে পারি। ওহ অপেক্ষা করুন, আপনার কি ফিরতে হবে?
টিম

* শ্রাগস * , আপনি যদি পুরোপুরি সঠিক হতে চান তবে আপনাকে আরও কয়েকটি # যুক্ত করা দরকার, তবে আমার সংকলকটিতে ডিফল্ট সতর্কতাগুলি যত্ন নেওয়ার মত মনে হচ্ছে না।
ব্যবহারকারী 606723

আপনি free(line)এটিকে ছেড়ে দিতে পারেন কারণ প্রোগ্রামটি থেকে বেরিয়ে আসলে স্পষ্টভাবে সমস্ত বরাদ্দ মেমরি মুক্ত হয় - তারপরে একটি জায়গা রয়েছে return 0;...;)। এমনকি উদাহরণগুলিতেও রিটার্ন কোডটি অপরিশোধিত রেখে দেওয়া ভাল স্টাইল নয়। বিটিডাব্লু, getlineএটি একটি জিএনইউ এক্সটেনশন - যদি কেউ ভাবছেন।
ম্যাক্সচলেপজিগ

@ ম্যাক্সচ্লেপজিগ: গেটলাইন () দ্বারা বরাদ্দকৃত লাইন দ্বারা স্মৃতি কি পয়েন্ট করা আছে? এটি মলোক দ্বারা স্তূপে বা স্থিরভাবে স্ট্যাকের উপর গতিশীলভাবে বরাদ্দ করা হয়? আপনি বলেছিলেন যে এটি নিখরচায় করা জরুরি নয়, তাই এটি কী গতিশীলভাবে বরাদ্দ দেওয়া হয় না?
টিম

1
@ টিম, হ্যাঁ, উদাহরণস্বরূপ, আপনি যদি কোডটি রিফ্যাক্ট করে যেমন এটি একটি স্ট্যান্ডলোন ফাংশন - বলুন - fযা অন্যান্য কোড থেকে বেশ কয়েকবার কল করা হয়, তবে আপনাকে এই ফাংশনটির শেষে freeশেষ কল করার পরে কল করতে হবে । getlinef
ম্যাক্সচেলেপজিগ

6

একটি স্ট্রিংয়ের জন্য, সর্বাধিক সহজটি হবে trএবং wc(বেশি পরিমাণে awkবা এর সাথে ওভারকিল করার দরকার নেই sed) - তবে উপরের মন্তব্যগুলি নোটগুলি trনয়, বাইট গণনা করে -

echo $x | tr -d -c '"' | wc -m

$xমূল্যায়ন করার জন্য স্ট্রিং (কোনও ফাইল নয়) রয়েছে এমন ভেরিয়েবলটি কোথায় ।


4

এখানে আরও একটি সি সমাধান রয়েছে যা কেবলমাত্র এসটিডি সি এবং কম মেমরির প্রয়োজন:

#include <stdio.h>

int main(int argc, char **argv)
{
  if (argc < 2 || !*argv[1]) {
    puts("Argument missing.");
    return 1;
  }
  char c = *argv[1], x = 0;
  size_t count = 0;
  while ((x = getc(stdin)) != EOF)
    if (x == '\n') {
      printf("%zd\n", count);
      count = 0;
    } else if (x == c)
      ++count;
  return 0;
}

এটি শেষ লাইনে রিপোর্ট করবে না যদি এর পিছনে '\ n' না থাকে
পিটার.ও

1
@ ফ্রেড, হ্যাঁ, যা উদ্দেশ্যমূলক, কারণ পিছনে ছাড়াই একটি \nলাইন কোনও আসল লাইন নয়। এটি আমার অন্যান্য সেড / অ্যাজক (টিআর / অ্যাজক) উত্তরের মতো একই আচরণ।
ম্যাক্সচলেপজিগ

3

আমরা ব্যবহার করতে পারি grepসঙ্গে regexএটি আরো সহজ এবং শক্তিশালী করা।

নির্দিষ্ট চরিত্র গণনা করা।

$ grep -o '"' file.txt|wc -l

সাদা স্পেস অক্ষর সহ বিশেষ অক্ষর গণনা করা।

$ grep -Po '[\W_]' file.txt|wc -l

এখানে আমরা আলাদা আলাদা লাইনে প্রতিটি ম্যাচ (যা প্রতিটি অক্ষর) মুদ্রণ করতে বিকল্পের সাথে [\S\s]এবং -oবিকল্পের সাথে যে কোনও অক্ষর নির্বাচন করছি grep। এবং তারপরে wc -lপ্রতিটি লাইন গণনা করতে ব্যবহার করুন ।


ওপি কোনও ফাইলের মধ্যে সমস্ত অক্ষরের সংখ্যা মুদ্রণ করতে চায় না! তিনি একটি নির্দিষ্ট চরিত্রের নম্বর / মুদ্রণ করতে চান। উদাহরণস্বরূপ "প্রতিটি লাইনে কতজন রয়েছে; এবং অন্য কোনও চরিত্রের জন্য। তার প্রশ্ন দেখুন এবং উত্তরও স্বীকার করেছেন।
нιηসнιη

3

সম্ভবত আরও সোজা এগিয়ে, খালি বিশ্রী উত্তরটি হবে বিভক্ত ব্যবহার। বিভক্ত একটি স্ট্রিং নেয় এবং এটিকে অ্যারেতে পরিণত করে, ফেরতের মানটি অ্যারে আইটেমের সংখ্যা +1 হয়।

নিম্নলিখিত কোডটি প্রতিটি লাইনে প্রদর্শিত সময়ের সংখ্যা মুদ্রণ করবে।

awk ' {print (split($0,a,"\"")-1) }' file_to_parse

বিভক্ত আরো তথ্যের http://www.staff.science.uu.nl/~oostr102/docs/nawk/nawk_92.html


2

এখানে "ফাইলের প্রতিটি লাইনের গণনা সন্ধানের জন্য পাইথন স্ক্রিপ্টটি এখানে রয়েছে :

#!/usr/bin/env python2
with open('file.txt') as f:
    for line in f:
        print line.count('"')

এখানে আমরা countঅন্তর্নির্মিত strপ্রকারের পদ্ধতিটি ব্যবহার করেছি ।


2

খাঁটি বাশ সমাধানের জন্য (তবে এটি বাশ-নির্দিষ্ট): যদি $xআপনার স্ট্রিং যুক্ত ভেরিয়েবল হয়:

x2="${x//[^\"]/}"
echo ${#x2}

${x//জিনিস ছাড়া সমস্ত অক্ষর সরিয়ে ফেলা হবে ", ${#x2}এই বিশ্রামের দৈর্ঘ্য হিসাব করে।

(আসল পরামর্শ exprযার সাহায্যে সমস্যা রয়েছে, মন্তব্যগুলি দেখুন:)

expr length "${x//[^\"]/}"

মনে রাখবেন যে এটি জিএনইউ-এর সাথে নির্দিষ্ট exprএবং বাইটগুলি গন্য করা হয়েছে, অক্ষর নয়। অন্যান্য সহ expr:expr "x${x...}" : "x.*" - 1
স্টাফেন চেজেলাস

ওহ ঠিক আছে, ধন্যবাদ! আমার সবেমাত্র ছিল এমন একটি অন্য ধারণা ব্যবহার করে আমি এটি সংশোধন করেছি, যার বাহ্যিক প্রোগ্রামটি ব্যবহার না করার সুবিধা রয়েছে।
মারিয়ান

2

aগণনা করার জন্য চরটি প্রতিস্থাপন করুন । আউটপুট প্রতিটি লাইনের জন্য কাউন্টার হয়।

perl -nE 'say y!a!!'

2

উপস্থাপিত সমাধানগুলির সময়ের তুলনা (কোনও উত্তর নয়)

উত্তরের দক্ষতা গুরুত্বপূর্ণ নয়। তবুও, @ জোসেফডাব্লু পদ্ধতির অনুসরণ করে, আমি উপস্থাপিত সমস্ত উত্তরকে সময় দেওয়ার চেষ্টা করেছি।

আমি ভিক্টর হুগো পর্তুগিজ অনুবাদ "লেস মিসরিবলস" (দুর্দান্ত বই!) হিসাবে ইনপুট হিসাবে ব্যবহার করি এবং "ক" এর উপস্থিতি গণনা করি। আমার সংস্করণে 5 টি খণ্ড রয়েছে, অনেক পৃষ্ঠা রয়েছে ...

$ wc miseraveis.txt 
29331  304166 1852674 miseraveis.txt 

সি উত্তরগুলি জিসিসি দিয়ে সংকলিত হয়েছিল (কোনও অপ্টিমাইজেশন নেই)।

প্রতিটি উত্তর 3 বার চালানো হয়েছিল এবং সেরা চয়ন করুন।

এই সংখ্যাগুলির উপর খুব বেশি বিশ্বাস করবেন না (আমার মেশিন অন্যান্য কাজগুলি ইত্যাদি করছে)) আমি আপনার সাথে এই সময়গুলি ভাগ করছি, কারণ আমি কিছু অপ্রত্যাশিত ফলাফল পেয়েছি এবং আমি নিশ্চিত আপনি আরও কিছু খুঁজে পাবেন ...

  • 16 টির 14 টি সময়সীমাবদ্ধ সমাধানগুলি তখন 1s কম নিয়েছিল; ৯.০ এর কম তবে ০.০ সে, পাইপ ব্যবহার করে তাদের অনেকে
  • 2 সমাধান, রেখায় বাশ লাইন ব্যবহার করে 30k লাইনগুলিকে নতুন প্রক্রিয়া তৈরি করে প্রক্রিয়াজাত করে, 10/20-এর মধ্যে সঠিক সমাধান গণনা করুন।
  • grep -oP aতখন গাছের গতি দ্রুত হয় grep -o a (10; 11 বনাম 12)
  • সি এবং অন্যদের মধ্যে পার্থক্য এতটা বড় নয় যেটা আমি আশা করেছিলাম। (7; 8 বনাম 2; 3)
  • (সিদ্ধান্ত স্বাগত)

(এলোমেলো ক্রমে ফলাফল)

=========================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

1
grep -n -o \" file | sort -n | uniq -c | cut -d : -f 1

যেখানে গ্রেপ সমস্ত ভারী উত্তোলন করে: প্রতিটি লাইন সংখ্যায় পাওয়া প্রতিটি চরিত্রের প্রতিবেদন করে। বাকিটি কেবল প্রতি লাইনে গণনা যোগফল এবং আউটপুট ফর্ম্যাট।

সরান -nএবং পুরো ফাইলের জন্য গণনা পান।

০.০১৫ সেকেন্ডের মধ্যে একটি 1.5 মেগ টেক্সট ফাইল গণনা দ্রুত বলে মনে হচ্ছে।
এবং অক্ষর (বাইট নয়) নিয়ে কাজ করে।


1

বাশ জন্য একটি সমাধান। কোনও বাহ্যিক প্রোগ্রাম ডাকা হয়নি (সংক্ষিপ্ত স্ট্রিংয়ের জন্য দ্রুত)।

মানটি যদি একটি চলকতে থাকে:

$ a='"Hello!"'

"এটি এতে থাকা কতগুলি মুদ্রণ করবে :

$ b="${a//[^\"]}"; echo "${#b}"
2
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.