سؤال

هل هناك أي طريقة ضمن Linux/Terminal لحساب عدد مرات ظهور الحرف f في ملف نصي عادي؟

هل كانت مفيدة؟

المحلول

وماذا عن هذا:

fgrep -o f <file> | wc -l

ملحوظة: وعلاوة على ذلك أسهل بكثير أن نتذكر / تكرار وتخصيص، وهذا عبارة عن ثلاث مرات (! آسف، تحرير فاشلة الاختبار الأول) أسرع من إجابة Vereb ل

نصائح أخرى

حتى أسرع:

tr -cd f < file | wc -c

الوقت لهذا الأمر بملف بحجم 4.9 ميجابايت و1100000 تكرار للحرف الذي تم البحث عنه:

real   0m0.089s
user   0m0.057s
sys    0m0.027s

حان وقت الإجابة على فيريب echo, cat, tr و bc لنفس الملف:

real   0m0.168s
user   0m0.059s
sys    0m0.115s

حان الوقت للإجابة على Rob Hruska tr, sed و wc لنفس الملف:

real   0m0.465s
user   0m0.411s
sys    0m0.080s

حان الوقت للإجابة Jefromi مع fgrep و wc لنفس الملف:

real   0m0.522s
user   0m0.477s
sys    0m0.023s 
echo $(cat <file>  | wc -c) - $(cat <file>  | tr -d 'A' | wc -c) | bc

وحيث A هو الشخصية

والوقت لهذا الأمر مع ملف مع 4.9 MB و1100000 أحداثا من الطابع البحث:

real   0m0.168s
user   0m0.059s
sys    0m0.115s

وإذا كان كل ما عليك القيام به هو حساب عدد الأسطر التي تحتوي على الطابع الخاص بك، هذا العمل:

grep -c 'f' myfile

ومع ذلك، فإنه يهم حوادث متعددة من 'و' على نفس الخط مباراة واحدة.

tr -d '\n' < file | sed 's/A/A\n/g' | wc -l

استبدال تكراري "A" بشخصيتك، و"ملف" بملف الإدخال الخاص بك.

  • tr -d '\n' < file:يزيل الأسطر الجديدة
  • sed 's/A/A\n/g:يضيف سطرًا جديدًا بعد كل ظهور للحرف "A"
  • wc -l:يحسب عدد الخطوط

مثال:

$ cat file
abcdefgabcdefgababababbbba


1234gabca

$ tr -d '\n' < file | sed 's/a/a\n/g' | wc -l
9
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top