عد تكرارات حرف في ملف نص عادي
سؤال
هل هناك أي طريقة ضمن 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