كيفية استخدام الأمر wc في لينكس

إن حساب عدد الأسطر والكلمات والبايتات في الملف مفيد، ولكن المرونة الحقيقية لنظام Linux wc يأتي الأمر من خلال العمل مع أوامر أخرى. دعنا نلقي نظرة.




ما هو الأمر wc؟

ال wc يعد الأمر تطبيقًا صغيرًا. وهو أحد أدوات Linux الأساسية، لذا لا توجد حاجة إلى تثبيته. سيكون موجودًا بالفعل على جهاز الكمبيوتر الذي يعمل بنظام Linux.

يمكنك وصف ما يفعله بكلمات قليلة جدًا. فهو يحسب الأسطر والكلمات والبايتات في ملف أو مجموعة مختارة من الملفات ويطبع النتيجة في نافذة طرفية. كما يمكنه أيضًا أخذ مدخلاته من دفق STDIN، مما يعني أنه يمكن توجيه النص الذي تريد معالجته إليه. وهنا يأتي دور wc يبدأ بالفعل بإضافة قيمة.

ذات صلة: كيفية استخدام الأنابيب على Linux

إنه مثال رائع لمبدأ “افعل شيئًا واحدًا وافعله جيدًا” في نظام Linux. ولأنه يقبل الإدخال المباشر، فيمكن استخدامه في التعويذات متعددة الأوامر. وكما سنرى، فإن هذه الأداة الصغيرة المستقلة هي في الواقع أداة رائعة للعمل الجماعي.

طريقة واحدة أستخدمها wc يُستخدم كعلامة نائبة في أمر معقد أو اسم مستعار أقوم بإعداده. إذا كان الأمر النهائي يحتمل أن يكون مدمرًا ويحذف الملفات، فأنا غالبًا ما أستخدم wc كبديل للأمر الحقيقي الخطير.


بهذه الطريقة، أثناء تطوير الأمر، أحصل على ملاحظات مرئية تفيد بأن كل ملف يتم معالجته كما توقعت. لا توجد فرصة لحدوث أي شيء سيئ أثناء صراعي مع قواعد اللغة.

بسيطة مثل wc ولكن لا يزال هناك بعض التفاصيل الصغيرة التي تحتاج إلى معرفتها.

البدء مع wc

أبسط طريقة للاستخدام wc هو تمرير اسم ملف نصي على سطر الأوامر.

wc lorem.txt

استخدام wc مع ملف يحتوي على سطر واحد طويل من النص

هذا يسبب wc لمسح الملف وحساب الأسطر والكلمات والبايتات وكتابتها في نافذة المحطة الطرفية.

تعتبر الكلمات أي شيء محصورًا بمسافة بيضاء. وسواء كانت كلمات من لغة حقيقية أم لا، فهذا لا يهم. إذا كان الملف لا يحتوي على شيء سوى “frd g lkj”، فإنه لا يزال يُحسب على أنه ثلاث كلمات.


الأسطر عبارة عن تسلسلات من الأحرف تنتهي إما بعلامة إرجاع أو بنهاية الملف. لا يهم إذا كان السطر يلتف في محرر النصوص الخاص بك أو في نافذة المحطة الطرفية، حتى wc إذا واجهنا إرجاع عربة أو نهاية الملف، فسيظل نفس السطر.

لقد وجدنا في مثالنا الأول سطرًا واحدًا في الملف بأكمله. هذا هو محتوى ملف “lorem.txt”.

cat lorem.txt

محتوى الملف بسطر واحد طويل

كل ذلك يعتبر سطرًا واحدًا لأنه لا توجد علامات إرجاع. قارن هذا بملف آخر، “lorem2.txt”، وكيف wc يفسرها.

wc lorem2.txt

cat lorem2.txt


استخدام wc مع ملف يحتوي على العديد من الأسطر

هذه المرة، wc يحسب 15 سطرًا لأن علامات الإرجاع قد تم إدراجها في النص لبدء سطر جديد عند نقاط معينة. ومع ذلك، إذا قمت بعدّ الأسطر التي تحتوي على نص، فستجد أن هناك 12 سطرًا فقط.

الأسطر الثلاثة الأخرى عبارة عن أسطر فارغة في نهاية الملف. تحتوي هذه الأسطر على علامات إرجاع فقط. ورغم عدم وجود نص في هذه الأسطر، فقد تم بدء سطر جديد وبالتالي wc يعدهم كذلك.

يمكننا تمرير عدد كبير من الملفات إلى wc كما نحب.

wc lorem.txt lorem2.txt

استخدام wc مع ملفين

نحصل على الإحصائيات لكل ملف فردي وإجمالي جميع الملفات.


يمكننا أيضًا استخدام أحرف البدل حتى نتمكن من تحديد الملفات المطابقة بدلاً من الملفات المسماة صراحةً.

wc *.txt *.?

استخدام wc مع الأحرف البدل

خيارات سطر الأوامر

افتراضيا، wc سيعرض الأسطر والكلمات والبايتات في كل ملف. الأمر يشبه استخدام -l (خطوط) -w (الكلمات) و -c خيارات (البايت).

wc lorem.txt

wc -l -w -c lorem.txt

استخدام wc مع خيارات الأسطر والكلمات والبايتات

يمكننا تحديد مجموعة الأرقام التي نرغب في رؤيتها.

wc -l lorem.txt

wc -w lorem.txt

wc -c lorem.txt

wc -l -c lorem.txt


استخدام wc مع مجموعات من الخيارات

ينبغي إيلاء اهتمام خاص للرقم الأخير الذي تم إنشاؤه بواسطة -c خيار (بايتات). يخطئ كثير من الناس في اعتبار هذا الخيار عدًا للأحرف. في الواقع، يحسب البايتات. قد يكون عدد الأحرف وعدد البايتات هو نفسه. ولكن ليس دائمًا.

دعونا نلقي نظرة على محتويات الملف المسمى “unicode.txt”.

cat unicode.txt

محتوى الملف الذي يحتوي على حرف غير لاتيني

تحتوي على ثلاث كلمات وحرف أبجدي غير لاتيني. دعنا نتعرف على wc معالجة الملف بإعداده الافتراضي للبايتات، وسنفعل ذلك مرة أخرى ولكن نطلب الأحرف التي تحتوي على -m خيار (الحروف).


wc unicode.txt

wc -l -w -m unicode.txt

عد البايتات في ملف ثم عد الأحرف في نفس الملف

هناك بايتات أكثر من عدد الأحرف.

دعنا نلقي نظرة على ملف التفريغ السداسي عشري للملف ونرى ما يحدث. hexdump الأوامر -C يعرض الخيار (canonical) البايتات الموجودة في الملف في أسطر مكونة من 16 بايتًا، مع إظهار معادلها العادي بتنسيق ASCII (إن وجد) في نهاية السطر. إذا لم يكن هناك حرف ASCII مطابق، يتم وضع نقطة “.” يظهر بدلا من ذلك.

hexdump -C unicode.txt

تفريغ سداسي لملف قصير يحتوي على حرف غير لاتيني


في ASCII، قيمة سداسية عشرية لـ 0x20 يمثل حرف مسافة. إذا أحصينا ثلاث قيم من اليسار، فسنرى أن القيمة التالية هي حرف مسافة. لذا فإن القيم الثلاث الأولى 0x62, 0x6f، و 0x79 تمثل الحروف الموجودة في كلمة “boy”.

القفز فوق 0x20نرى مجموعة أخرى من ثلاث قيم سداسية عشرية: 0x63, 0x61، و 0x74. هذه القيم تهجئ كلمة “قطة”. عند القفز فوق حرف المسافة التالي، نرى ثلاث قيم أخرى للحروف في كلمة “كلب”. هذه هي 0x64, 0x5f، و 0x67.

خلف كلمة “كلب” مباشرة يمكننا أن نرى حرف المسافة 0x20، وخمس قيم سداسية عشرية أخرى. القيمتان الأخيرتان عبارة عن إرجاعات عربة، 0x0a.

تمثل البايتات الثلاثة الأخرى الحرف غير اللاتيني، والذي قمنا بتظليله باللون الأخضر. إنه حرف Unicode، ويستغرق ترميزه ثلاثة بايتات. هذه هي 0xe1, 0xaf، و 0x8a.


لذا تأكد من معرفة ما تعده، وأن البايتات والأحرف لا يجب أن تكون متماثلة. عادةً، يكون عد البايتات أكثر فائدة لأنه يخبرك بما يوجد بالفعل داخل الملف. يمنحك العد بالأحرف عدد الأشياء التي تمثلها محتويات الملف.

ذات صلة: ما هي ترميزات الأحرف مثل ANSI وUnicode، وكيف تختلف؟

أخذ أسماء الملفات من ملف

هناك طريقة أخرى لتوفير أسماء الملفات إلى wc يمكنك وضع أسماء الملفات في ملف، وتمرير اسم هذا الملف إلى wcيفتح الملف ويستخرج أسماء الملفات ويعالجها كما لو تم تمريرها عبر سطر الأوامر. يتيح لك هذا تخزين مجموعة عشوائية من أسماء الملفات لإعادة استخدامها.

لكن هناك مشكلة كبيرة، وهي أن أسماء الملفات يجب أن تنتهي بعلامة فارغة، وليس بعلامة إرجاع السطر. أي أنه بعد كل اسم ملف يجب أن يكون هناك بايت فارغ من 0x00 بدلاً من بايت إرجاع العربة المعتاد 0x0a.

لا يمكنك فتح محرر وإنشاء ملف بهذا التنسيق. عادةً ما يتم إنشاء ملفات مثل هذه بواسطة برامج أخرى. ولكن إذا كان لديك مثل هذا الملف، فهذه هي الطريقة التي يمكنك استخدامه بها.


هذا هو ملفنا الذي يحتوي على أسماء الملفات. فتحه في less يظهر لك الغريب^@“الشخصيات التي less يستخدم للإشارة إلى البايتات الفارغة.

less source-files-list.txt

ملف في less يحتوي على بايتات فارغة

لاستخدام الملف مع wc، نحن بحاجة إلى استخدام --files0-from (قراءة الإدخال من) الخيار وتمرير اسم الملف الذي يحتوي على أسماء الملفات.

wc ---files0-from=source-files-list.txt

wc معالجة ملف أسماء الملفات المنتهية بعلامة null

يتم معالجة الملفات تمامًا كما لو تم توفيرها على سطر الأوامر.


مدخل الأنابيب إلى المرحاض

طريقة أكثر شيوعًا ومرونة وإنتاجية لإرسال المدخلات إلى wc هو توجيه الإخراج من الأوامر الأخرى إلى wc يمكننا أن نثبت ذلك من خلال echo يأمر.

echo "Count this for me" | wc

echo -e "Count this\nfor me" | wc

استخدام الصدى لإرسال الإدخال إلى wc

الثاني echo يستخدم الأمر -e خيار (الأحرف الهاربة) للسماح بالتسلسلات الهاربة مثل “\n“كود تنسيق السطر الجديد. يؤدي هذا إلى إدخال سطر جديد، مما يتسبب في wc لرؤية المدخلات كسطرين.

فيما يلي سلسلة من الأوامر التي تنقل مدخلاتها من واحد إلى الآخر.

find ./* -type f | rev | cut -d'.' -f1 | rev | sort | uniq


  • يجد يبحث عن الملفات (type -f) بشكل متكرر، بدءًا من الدليل الحالي. revيعكس أسماء الملفات.
  • يقطع يستخرج الحقل الأول (-f1) عن طريق تحديد فاصل الحقل ليكون نقطة “.“والقراءة من “”واجهة”” اسم الملف المعكوس حتى النقطة الأولى التي يجدها. لقد استخرجنا الآن امتداد الملف.
  • مراجعة يعكس الحقل المستخرج الأول.
  • نوع يقوم بتصنيفهم حسب الترتيب الأبجدي التصاعدي.
  • فريد من نوعه يسرد الإدخالات الفريدة لنافذة المحطة الطرفية.

قائمة الامتدادات الفريدة في شجرة الدليل الحالية

يقوم هذا الأمر بإدراج جميع ملحقات الملفات الفريدة الموجودة في الدليل الحالي وأي أدلة فرعية.

إذا أضفنا -c (العدد) الخيار ل uniq سيؤدي الأمر إلى حساب عدد مرات ظهور كل نوع من أنواع الامتدادات. ولكن إذا أردنا معرفة عدد امتدادات الملفات المختلفة والفريدة، فيمكننا إسقاط wc كآخر أمر على السطر، واستخدم -l خيار (الخطوط).


find ./* -type f | rev | cut -d'.' -f1 | rev | sort | uniq | wc -l

إضافة wc لحساب الامتدادات الفريدة

ذات صلة: كيفية استخدام أمر cut في Linux

وأخيرا

وهنا خدعة أخيرة wc يمكنه أن يفعل ذلك من أجلك. سيخبرك بطول أطول سطر في الملف. للأسف، لا يخبرك بالسطر الذي هو عليه. إنه يعطيك فقط طوله.

wc -L taf.c

الحصول على طول أطول سطر في ملف باستخدام wc

لكن انتبه، فعلامات التبويب تُحسب على أنها ثماني مسافات. وعند عرضها في محرر النصوص الخاص بي، ستجد ثلاث علامات تبويب بمسافتين في بداية هذا السطر. ويبلغ طولها الحقيقي 124 حرفًا. لذا فإن الرقم المذكور موسع بشكل مصطنع.


أود أن أتعامل مع هذه الوظيفة بحذر شديد. وأعني بذلك عدم استخدامها. فنتائجها مضللة.

على الرغم من غرابتها، wc تُعد أداة رائعة لإسقاطها في الأوامر الموجهة عندما تحتاج إلى حساب كافة أنواع القيم، وليس فقط الكلمات الموجودة في ملف.

ذات صلة: 37 أمرًا مهمًا في Linux يجب أن تعرفها

أضف تعليق